Разработка кодировки файла: я знаю строку, знаю символ, что такое кодировка? - PullRequest
1 голос
/ 16 августа 2010

Я добавляю данные из CSV-файла в базу данных.Если я открою файл CSV, некоторые из записей содержат маркеры - я их вижу.file говорит, что кодируется как ISO-8859.

$ file data_clean.csv 
data_clean.csv: ISO-8859 English text, with very long lines, with CRLF, LF line terminators

Я прочитал его следующим образом и преобразовал из ISO-8859-1 в UTF-8, что требуется для моей базы данных.

    row = [unicode(x.decode("ISO-8859-1").strip()) for x in row]
    print row[4]    
    description = row[4].encode("UTF-8")
    print description

Это дает мне следующее:

'\xa5 Research and insight \n\xa5 Media and communications'
¥ Research and insight 
¥ Media and communications 

Почему символ пули \ xa5 конвертируется в символ иены?

Я предполагаю, потому что я читаю это как неправильную кодировку, но какая правильная кодировка в этом случае?Это также не cp1252.

В более широком смысле, есть ли инструмент, в котором можно указать (i) строку (ii) известного символа и узнать кодировку?

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Я не знаю ни одного общего инструмента, но эта страница Википедии (ссылка с страница на кодовой странице 1252 ) показывает, что A5 - это точка маркера в Mac OS Roman кодовая страница.

1 голос
/ 21 августа 2010

В более широком смысле, есть ли инструмент, в котором вы можете указать (i) строку (ii) известного символа и узнать кодировку?

Вы можете легко написать один на Python.(В примерах используется синтаксис 3.x.)

import encodings

ENCODINGS = set(encodings._aliases.values()) - {'mbcs', 'tactis'}

def _decode(data, encoding):
    try:
        return data.decode(encoding)
    except UnicodeError:
        return None

def possible_encodings(encoded, decoded):
    return {enc for enc in ENCODINGS if _decode(encoded, enc) == decoded}

Так что, если вы знаете, что ваша точка пули U + 2022, то

>>> possible_encodings(b'\xA5', '\u2022')
{'mac_iceland', 'mac_roman', 'mac_turkish', 'mac_latin2', 'mac_cyrillic'}
0 голосов
/ 16 августа 2010

Вы можете попробовать

 iconv -f latin1 -t utf8 data_clean.csv 

если вы знаете, что это действительно iso-latin-1

Хотя в iso-latin-1 \ xA5 действительно ¥

Редактировать: На самом деле это проблема для Mac, использующего Word или аналогичное и Arial (?) И печатающего или конвертирующего в PDF. Некоторые вопросы о шрифтах, а что нет. Может быть, вам сначала нужно явно помассировать файл. Звучит знакомо?

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