Символы не отображаются правильно при чтении файла CSV - PullRequest
3 голосов
/ 18 апреля 2020

У меня проблема при попытке прочитать строку из файла .CSV. Когда я запускаю приложение и текст отображается в текстовом поле, некоторые символы, такие как «é» или «ó», отображаются в виде символа вопросительного знака. Идея состоит в том, что этот код читает весь файл CSV и затем разбивает каждую строку на переменные в зависимости от первого слова строки.

Код, который я использую для чтения:

Dim test() As String
test = IO.File.ReadAllLines("Libro1.csv")
Dim test_chart As String = Array.Find(vls1load, Function(x) (x.StartsWith("sample")))
Dim test_chart_div() As String = test_chart.Split(";")
variable1 = test_chart_div(1)
variable2 = test_chart_div(2)
...etc

Я также пытался с:

Dim test() As String
test = IO.File.ReadAllLines("Libro1.csv", System.Text.Encoding.UTF8)

Но ни один из них не работает. Файл .csv должен быть UTF8. «Веб-параметры», которые вы видите при сохранении файла в Excel, показывают кодировку UTF8. Я также попробовал хитрость, изменив расширение файла на HTML и открыв его в браузере, чтобы убедиться в правильности кодировки.

Может кто-нибудь посоветовать что-нибудь еще, что я могу попробовать? Заранее спасибо.

1 Ответ

1 голос
/ 19 апреля 2020

Когда файл Excel экспортируется с использованием формата вывода CSV Comma Separated, кодировка, выбранная в Инструменты -> Веб-опция -> Кодировка в Excel * Save As...* Диалоговое окно 1008 * фактически не генерирует ожидаемый результат:
Текстовый файл сохраняется с использованием кодировки относительно текущего языка, выбранного в приложении Excel, а не выбранной кодировки Unicode (UTF16-LE) или UTF-8 (которая игнорируется), ни кодировка по умолчанию, определяемая текущим языком системы.

Чтобы импортировать файл CSV, вы можете использовать метод Encoding.GetEncoding () , чтобы указать Имя или CodePage Кодировки, использованной на машине, сгенерировавшей файл: опять же, не кодировка, относящаяся к языку системы, а кодировка языка, который в настоящее время используется приложением Excel.

CodePage 1252 (Windows-1252) и ISO-8859-1 обычно используются в зоне Latin1.
На основе символов, на которые вы ссылаетесь, это, скорее всего, оригинальная кодировка.
В Windows используйте первую. ISO-8859-1 все еще используется, в основном на старых веб-страницах (или веб-страницах, созданных без учета используемой кодировки).

Как примечание, CodePage 1252 и ISO-8859-1 не совсем одинаковые кодировки, есть незначительные различия. Если вы найдете документацию, в которой говорится об обратном, документация неверна.

...