iconv unicode неизвестный формат ввода - PullRequest
7 голосов
/ 07 октября 2011

У меня есть файл, который описан в Unix как:

$file xxx.csv 
xxx.csv: UTF-8 Unicode text, with very long lines

Просмотр его в less / vi сделает некоторые специальные символы (ßÄ ... ...) нечитаемыми (├╝);Windows также не будет отображать его;импорт его непосредственно в базу данных просто заменит специальные символы на некоторые другие специальные символы (+ ä, + ñ, ...).

Теперь я хочу преобразовать его в кодируемую по умолчанию кодировку с помощью iconv,Когда я пытаюсь преобразовать его с помощью iconv

$iconv -f UTF-8 -t ISO-8859-1 xxx.csv > yyy.csv
iconv: illegal input sequence at position 1234

, используя UNICODE в качестве ввода и UTF-8 в качестве вывода, будет возвращено то же сообщение

Я предполагаю, что файл несколько закодирован в другом формате, которыйЯ не знаю - как я могу узнать, какой формат для преобразования его во что-то «универсально» читаемое ...

Ответы [ 3 ]

11 голосов
/ 23 сентября 2013

Преобразование из UTF-8 в ISO-8859-1 работает только в том случае, если ваш текст UTF-8 содержит только символы, которые могут быть представлены в ISO-8859-1. Если это не так, вы должны указать, что должно происходить с этими символами, игнорируя (// IGNORE) или аппроксимируя (// TRANSLIT) их. Попробуйте один из этих двух:

iconv -f UTF-8 -t ISO-8859-1//IGNORE --output=outfile.csv inputfile.csv
iconv -f UTF-8 -t ISO-8859-1//TRANSLIT --output=outfile.csv inputfile.csv

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

4 голосов
/ 12 октября 2011

Проблема заключалась в том, что Windows не могла интерпретировать файл как UTF-8 сам по себе. он читает его как аски, а затем становится двухсимвольной интерпретацией (ascii 195 164)

пытаясь преобразовать его, я нашел решение, которое работает для меня:

iconv -f UTF-8 -t WINDOWS-1252//TRANSLIT --output=outfile.csv inputfile.csv

теперь я могу правильно просматривать специальные символы в редакторах

Для совместимости с SQLServer преобразование UTF-8 в UTF-16 будет работать еще лучше ... просто размер файла увеличивается совсем немного

1 голос
/ 29 августа 2013

Если вы не уверены в типе файла, с которым вы имеете дело, вы можете найти его следующим образом:

file file_name

Приведенная выше команда предоставит вам формат файла. Тогда iconv можно использовать соответственно. Например, если формат файла UTF-16 и вы хотите преобразовать его в UTF-8 , тогда можно использовать следующее.

iconv -f UTF-16 -t UTF-8 file_name >output_file_name

Надеюсь, это даст дополнительную информацию о том, что вы ищете.

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