2014-11-26 4 views
1

У меня есть документ, который содержит различные специальные символы, такие как à © ÿ  ° à † oºi
Я написал следующие две команды, которые оба работают на «одиночных» ищет символы, такие как Ã Â ± È.Замена специальных символов

Однако ни одна из них не работает со специальными символами, перечисленными выше.

Эта команда работает с помощью двух байт шестигранные десятичные (Чтобы заменить Ã © с )

sed -i 's/\xc3\xA9/A/g' test.csv 

Эта команда использует utf8 для замены символов:

CHARS=$(python -c 'print u"\u00a9".encode("utf8")') sed -i 's/['"$CHARS"']/A/g' $filename 

либо из этих команд должны работать, но не делать.

+2

Скорее всего, это не специальные символы, но некоторые данные * неверно истолкованы * как кодируемые окнами-1252, когда они фактически закодированы в utf-8. Вы должны попытаться определить кодировку и прочитать данные в соответствии с этой кодировкой, вместо того чтобы выполнять некоторые случайные замены. Например, «Ã ©», вероятно, является кодировкой utf-8 буквы «é», поэтому было бы абсурдно заменить ее на «A». –

+0

Есть ли способ перекодировки этих специальных данных в utf-8 с помощью команды? –

+1

Это уже * есть * utf-8; ваш терминал или редактор или что-то другое - это как некоторая другая кодировка (windows-1252 или iso8859). – chepner

ответ

1

Похоже, вы просматриваете данные UTF-8 как ISO-8859-1 (aka latin1).

Это то, что вы испытываете при обращении с UTF-8 закодированный файл в ISO-8859-1 терминал:

$ cat file 
The café has crème brûlée. 

$ iconv -f utf-8 -t iso-8859-1 < file 
The café has crème brûlée. 

$ iconv -c -f utf-8 -t ascii//ignore < file 
The caf has crme brle. 

Это обычно происходит только для пользователей PuTTY, потому что PuTTY является одним из немногих терминальные эмуляторы, которые по-прежнему используют ISO-8859-1 по умолчанию. Вы можете настроить его на использование UTF-8 в конфигурации PuTTY.

Вот тот же самый пример в терминале UTF-8:

$ cat file 
The café has crème brûlée. 

$ iconv -f utf-8 -t iso-8859-1 < file 
The caf� has cr�me br�l�e. 

$ iconv -c -f utf-8 -t ascii//ignore < file 
The caf has crme brle. 

Единственное правильное решение, чтобы исправить вашу установку так, что он использует UTF-8 во всем. ISO-8859-1 не поддерживает языки и функции, которые мы считаем сегодня само собой разумеющимися, и не является полезным вариантом.

Смежные вопросы