Файл UTF-8 не показывает китайские иероглифы в Excel

6538
Techidiot

Я создаю файл CSV с кодировкой UTF-8.

Он отображает китайские символы правильно, если я открываю его с помощью Notepad ++.

Он отображает китайские символы правильно, если я открою его с помощью блокнота.

Но, если я открою его с помощью Excel, я вижу значения мусора.

Если я открою его с помощью Блокнота и нажму Control + S, закрою файл и снова открою в Excel, он отлично отобразит символы.

Любые подсказки, что происходит здесь?

Я также попытался создать нормальный CSV-файл с кодировкой GB2312. Затем я использовал Unix команду iconv, чтобы преобразовать файл из "GB2312" в "UTF-8"

Эта команда удаляет все китайские символы и показывает только английские символы. Так что это не решение проблемы.

Пожалуйста, предложите.

Редактировать -

Он не показывает значение мусора, но показывает кодировку ANSI. Почему он выбирает кодировку ANSI по умолчанию. И почему после открытия того же файла в Notepad / Notepad ++ он открывается с UTF-8.

Кроме того, почему просто Control + s делает его правильно открыть в Excel.

1
Для дальнейшего использования: при использовании `iconv`, смотрите параметр` --add-signature` для добавления спецификации. Arjan 8 лет назад 0

2 ответа на вопрос

3
Chris.C

В Linux UTF8 обычно сохраняется без спецификации, поскольку спецификация UTF8 является необязательной, поэтому приложения могут иметь проблемы с определением правильного кодирования. Вы можете попытаться сохранить их в UTF8 с помощью спецификации или использовать вместо нее UTF16.

Проблема для меня была в том, что у меня нет возможности добавлять данные в формате UTF16 на моем языке программирования. Разрешается только UTF-8, и это идет без спецификации. Techidiot 8 лет назад 0
0
Techidiot

Я знал о последовательности спецификации с кодировкой UTF-8, но не знал, как добавить ее в мой файл.

Теперь последовательность спецификаций 0xEF, 0xBB, 0xBF, поэтому я попытался добавить это как обычный текст, но это не сработало. Итак, я добавил значения ASCII в CSV, и это работает.

Значение ASCII =

new.text = chr $ (239) & chr $ (187) & chr $ (191) | Объединенный

Просто добавьте это как 1-ую строку, и это работает!

Спасибо Крис за ваше предложение.