Юникод в CSV-файле? - PullRequest
       5

Юникод в CSV-файле?

0 голосов
/ 16 сентября 2010

Мне нужно создать файл CSV. Возможно, я «делаю это неправильно», потому что я создаю дамп файла со своим собственным кодом вместо использования библиотеки lib, но в любом случае.

Похоже, у меня все в порядке. Кавычки, запятые и все, кажется, экранированы идеально. Это было довольно легко. Проблема в том, что я использую строки Юникода для тестирования, и они выходят как ????. Когда я использую MS Excel, чтобы сохранить файл с моей тестовой строкой, и я нажимаю "Сохранить как CSV", открытие файла вызывает у меня ту же проблему (буквы юникода становятся ?????). Unicode не поддерживается?

Я только что попытался вывести такую ​​строку вместо вывода ее на веб-страницу

var f = new System.IO.StreamWriter(filename, false, System.Text.Encoding.Unicode);

и теперь я вижу текст Unicode, но теперь все в одном столбце. Что странно, в моем текстовом редакторе все выглядит нормально, и если я копирую / вставляю несколько столбцов и вставляю их при сохранении как .csv, я вижу столбцы в порядке. Хотя это, вероятно, удаляет Unicode.

Как мне сохранить это правильно?

Ответы [ 3 ]

3 голосов
/ 16 сентября 2010

System.Text.Encoding.Unicode использует кодировку UTF-16.Попробуйте сказать вашим текстовым редакторам декодировать с UTF-16;Я предполагаю, что редактор, который вы используете для отображения выходного файла, по умолчанию использует UTF-8 или ASCII.Если это так, альтернативой может быть кодирование вывода с помощью System.Text.Encoding.UTF8.

1 голос
/ 16 сентября 2010

Вам необходимо сделать две вещи: пометить текстовый файл (или html-страницу) как содержащий символы Unicode (UTF-8 или UTF-16) и убедиться, что вы используете текстовый редактор, поддерживающий текст Unicode.Блокнот - хороший выбор в Windows.

Чтобы пометить текстовый файл (например, .csv) как содержащий текст Unicode, вам нужно написать Порядок следования байтов (BOM) в качестве первогосимвол в текстовом файле.Для UTF-16 с прямым порядком байтов (Intel) спецификация будет байтами 0xFF, 0xFE.Метка порядка следования байтов сообщает читателю документа, упорядочены ли символы в документе как с прямым порядком байтов или с прямым порядком байтов.Символ спецификации является зарезервированным непечатным символом в таблицах символов Юникода.Эту спецификацию можно также использовать для различения текста ASCII от кодировки UTF-8 и других кодировок Unicode (поскольку последовательность байтов спецификации UTF-8 отличается от последовательности UTF-16 и т. Д.).

Некоторые авторы документов пишут спецификациюдля вас, или есть возможность включить или исключить спецификацию.Используйте двоичный шестнадцатеричный дамп для просмотра байтов текстового файла, чтобы определить, есть ли у вас спецификация или нет.Не используйте текстовый редактор - спецификация не отображает символ.

Чтобы указать, что генерируемая HTML-страница содержит символы Unicode, необходимо установить заголовок Content-Type, чтобы указать кодировку Unicode:Content-Type: text/html; charset=utf-8 указывает, например, текст Unicode в кодировке UTF-8.

0 голосов
/ 16 сентября 2010

Возможно, шрифт, используемый Word, пропускает те символы, которые вы пытаетесь отобразить.Если я открою Word, удержу ALT и сделаю пюре из своей цифровой клавиатуры, он изменит шрифт на математический, но все равно отобразит недостающий символ из рассматриваемого шрифта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...