LINUX.ORG.RU

Лор, почини мне кодировку

 ,


0

1

Суть такова: есть 1 csv файл со сломанной кодировкой. Он якобы сохранён в utf8, но некоторые символы полетели. Я пробовал шаманить с iconv ( в том числе и пройтись брутфорсом по все известным кодировкам ). Но ничего не помогло.

Потом попробовал проблемную часть вбить в этот сайт (клац) выставил cp1252 > utf8, и о чудо! он починил мой кусок.

Внимание вопрос: Как мне починить кодировку? Я бы с радостью вбил бы весь файл на сайт, но он весит > 50 мб. И вообще как этот сайт починил кодировку учитывая то что iconv не смог?

★★★★★

Последнее исправление: snaf (всего исправлений: 1)

а если «iconv -f cp1252 -t utf-8» проделать над файлом, проблемный кусок все равно нечитаем? Можно увидеть, что с ним происходит?

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

проблемный кусок все равно нечитаем?

читаем, некоторые символы падают

Можно увидеть, что с ним происходит?

конечно

$ iconv -f cp1252 -t utf-8 file | head -n 2
ÿþTiefenbacher GesmbH   Wirtschaftspark Str 3 6 4482    Ennsdorf                        «43,722,384,962»                                                        +43 7223 84962-5                    office@tibagmbh.at                                                                              http://www.tibagmbh.at
ABL-TECHNIC Bogensberger GesmbH Eisenstr 7      4502    Sankt Marien                    «43,722,978,599»                                                        +43 7229 78599-44                   office@abl.at                                                                           http://www.abl.at               «lohnlackieren, gehänge, Entlacken, abl»

Но если проблемые слова например gehänge, вбить в сайт, то он их починет.

snaf ★★★★★
() автор топика
Ответ на: комментарий от Kiborg

И вроде бы даже понятно почему.

Мне не понятно. Дядя разжуй пожалуйста. Как оно так вообще получилось если я сохранял в юникод?

Хм.. как мне весь файл конвертнуть?

 cat file.txt | iconv -f utf-8 -t cp1252 | head -n 5
iconv: illegal input sequence at position 0

snaf ★★★★★
() автор топика
Ответ на: комментарий от anonymous
$ hexdump file.txt | head -c 1000
0000000 feff 0054 0069 0065 0066 0065 006e 0062
0000010 0061 0063 0068 0065 0072 0020 0047 0065
0000020 0073 006d 0062 0048 0009 0057 0069 0072
0000030 0074 0073 0063 0068 0061 0066 0074 0073
0000040 0070 0061 0072 006b 0020 0053 0074 0072
0000050 0020 0033 0020 0036 0009 0034 0034 0038
0000060 0032 0009 0045 006e 006e 0073 0064 006f
0000070 0072 0066 0009 0009 0009 0022 0034 0033
0000080 002c 0037 0032 0032 002c 0033 0038 0034
0000090 002c 0039 0036 0032 0022 0009 0009 0009
00000a0 0009 0009 0009 0009 002b 0034 0033 0020
00000b0 0037 0032 0032 0033 0020 0038 0034 0039
00000c0 0036 0032 002d 0035 0009 0009 0009 006f
00000d0 0066 0066 0069 0063 0065 0040 0074 0069
00000e0 0062 0061 0067 006d 0062 0068 002e 0061
00000f0 0074 0009 0009 0009 0009 0009 0009 0009
0000100 0009 0009 0009 0068 0074 0074 0070 003a
0000110 002f 002f 0077 0077 0077 002e 0074 0069
0000120 0062 0061 0067 006d 0062 0068 002e 0061
0000130 0074 0009 0009 0009 0009 0009 0009 000d
0000140 000a 0041 0042 004c 002d 0054 00
snaf ★★★★★
() автор топика
Ответ на: комментарий от anonymous

точняк, это был utf16. Спасибо невидимка =)

snaf ★★★★★
() автор топика
Ответ на: комментарий от snaf

Вот «как оно получилось» (что файл так сохранился) - это не очень понятно, скорее всего это windows, там любят utf-16.

А вот примерно, что происходит в байтах (грубая аналогия): вместо 0xc3a4 (прямой порядок байт) было записано 0x00c3 0x00a4. При декодировании из utf-16 в cp1252 коды однобайтных символов от 0xA0 до 0xFF не изменяются, т. е. 0x00A4 (utf-16) -> 0xA4 (cp1252). Поэтому надо конвертировать из utf-16 в cp1252.

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

скорее всего это windows, там любят utf-16.

да действительно, исходный файл был создан под виндой. Спасибо за объяснение.

snaf ★★★★★
() автор топика
Ответ на: комментарий от snaf

iconv: illegal input sequence at position 0

кстати, помогает iconv -c а то иногда внутри UTF-8 бывают НЕ utf-8.

(не ваш случай)

emulek
()
Ответ на: комментарий от Kiborg

щёрт,

$ iconv -f utf-16 -t cp1252 "file.txt" > temp
iconv: illegal input sequence at position 824684

Не обрабатывает весь файл. Что то можно поделать?

snaf ★★★★★
() автор топика
Ответ на: комментарий от snaf

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

Kiborg ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.