Замена немецких умлаутов в файле ISO 8859-15 в системе UTF 8

У меня есть куча CSV-файлов, которые я читаю и разрабатываю с помощью python и pandas.

Чтобы добавить больше информации о файле (точнее, о данных) в мои графики, я анализирую их заголовки, чтобы извлечь из него различные вещи (местоположение точки измерения, тип измерения и т. Д.).

Проблема в том, что файлы на немецком языке и поэтому содержат много умлаутов (ü, ö, ä). Теперь я могу прекрасно их читать и понимать, а мой сценарий - нет.

Поэтому я хочу просто заменить их действительными двухсимвольными представлениями (ü=ue, …), чтобы мне не пришлось беспокоиться об использовании таких вещей, как u'Ümlautstring' или же \xfcstring в питоне.

sed -i 's/\ä/ae/g' myfile.csv

должен сделать свое дело, по словам Google, но это не работает.

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

Мои CSV-файлы закодированы в ISO 8859-15, но мой locale является LANG=de_DE.UTF-8что, насколько я понимаю, означает, что sed ищет ü в форме utf 8, которую он не найдет в ISO 8859-15.

Так что мне сказать sed, чтобы найти мои умлауты?

Большинство вещей, которые я нашел до сих пор, предлагают Perl, но на самом деле это не вариант.

1 ответ

Решение

Вы можете использовать LC_* envvars для предотвращения использования sed любой интерпретации UTF-8 и \x escape-последовательности для указания символов умляута по их шестнадцатеричному значению в ISO-8859-15. Короче,

LC_ALL=C sed 's/\xc4/Ae/g;s/\xd6/Oe/g;s/\xdc/Ue/g;s/\xe4/ae/g;s/\xf6/oe/g;s/\xfc/ue/g;s/\xdf/ss/g' filename

должен работать для всех ÄÖÜäöüß, которые, я думаю, те, о которых ты заботишься.

Другие вопросы по тегам