编制文件编码:我知道字符串,知道字符,编码是什么?

时间:2010-08-16 14:53:34

标签: encoding character-encoding

我正在将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 个答案:

答案 0 :(得分:2)

我不知道任何常规工具,但this Wikipedia page(从the page on codepage 1252链接)表明A5Mac OS Roman代码页中的项目符号点。

答案 1 :(得分:1)

  

更一般地说,有一个工具在哪里   你可以指定(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'}

答案 2 :(得分:0)

你可以尝试

 iconv -f latin1 -t utf8 data_clean.csv 

如果你知道它确实是iso-latin-1

虽然在iso-latin-1 \ xA5中确实是¥

编辑:实际上这似乎是Mac上的问题,使用Word或类似的和Arial(?)并打印或转换为PDF。关于字体的一些问题,什么不是。也许你需要先明确按摩文件。听起来很熟悉?