Windows 1252 к кодировке UTF-8

Я скопировал определенные файлы с машины Windows на машину Linux. Так весь закодированный Windows (окна 1252) файлы должны быть преобразованы в UTF-8. Файлы, которые уже находятся в UTF-8, не должны быть изменены. Я планирую использовать recode утилита для этого. Как я могу указать что recode утилита должна только преобразовать окна 1 252 закодированных файла а не файлы UTF-8?

Использование в качестве примера перекода:

recode windows-1252.. myfile.txt

Это преобразовало бы myfile.txt из окон 1252 к UTF-8. Прежде, чем сделать это, я хотел бы знать это myfile.txt на самом деле окна закодированный 1252 и не закодированный UTF-8. Иначе я полагаю, что это повредило бы файл.

33
задан TRiG 5 March 2017 в 21:37
поделиться

4 ответа

Как можно ожидать от перекодирования, чтобы узнать, что файл является файлом Windows-1252? Теоретически я считаю, что любой файл является допустимым файлом Windows-1252, поскольку он отображает каждый возможный байт на символ.

Конечно, есть характеристики, которые убедительно предполагают , что это UTF-8 - если он начинается, например, со спецификации UTF-8 - но они не будут окончательными.

Один из вариантов - сначала определить, действительно ли это полностью действительный файл UTF-8, я полагаю ... опять же, это только наводит на размышления.

Я не знаком с самим инструментом перекодирования, но вы, возможно, захотите узнать, может ли он перекодировать файл из и в той же кодировке - если вы сделаете это с недопустимым файлом (т. Е. тот, который содержит недопустимые последовательности байтов UTF-8), он вполне может преобразовать недопустимые последовательности в вопросительные знаки или что-то подобное. В этот момент вы можете определить, что файл является допустимым UTF-8, перекодировав его в UTF-8 и проверив, идентичны ли вход и выход.

В качестве альтернативы, сделайте это программно, а не с помощью утилиты перекодирования - это было бы довольно просто, например, в C #.

Просто повторюсь: все это эвристика. Если вы действительно не знаете кодировку файла, ничто не скажет вам это со 100% точностью.

36
ответ дан 27 November 2019 в 17:24
поделиться

iconv -f WINDOWS-1252 -t UTF-8 filename.txt

66
ответ дан 27 November 2019 в 17:24
поделиться

Нет общего способа определить, закодирован ли файл в определенной кодировке. Помните, что кодировка - это не более чем "соглашение" о том, как биты в файле должны быть привязаны к символам.

Если вы не знаете, какие из ваших файлов на самом деле уже закодированы в UTF-8, а какие - в windows-1252, вам придется просмотреть все файлы и выяснить это самому. В худшем случае это может означать, что Вы должны открыть каждую из них в одной из двух кодировок и посмотреть, "выглядят" ли они правильно - т.е. все символы отображаются правильно. Конечно, для этого можно использовать инструментальную поддержку, Например, если Вы точно знаете, что некоторые символы содержатся в файлах, которые имеют другое отображение в windows-1252 vs. UTF-8, то Вы можете смазать их после прогона файлов через 'iconv', как упоминал Сева Акекекеев.

Другой счастливый случай для Вас, если Вы знаете, что файлы на самом деле содержат только символы, которые одинаково закодированы как в UTF-8, так и в windows-1252. В таком случае, конечно, вы уже закончили

.
8
ответ дан 27 November 2019 в 17:24
поделиться

Используйте команду iconv .

Чтобы убедиться, что файл находится в Windows-1252, откройте его в Блокноте (в Windows), затем нажмите «Сохранить как». Блокнот предлагает текущую кодировку по умолчанию; если это Windows-1252 (или любая 1-байтовая кодовая страница, если на то пошло), будет написано «ANSI».

2
ответ дан 27 November 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: