我正在将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)已知字符,并找出编码?
答案 0 :(得分:2)
我不知道任何常规工具,但this Wikipedia page(从the page on codepage 1252链接)表明A5
是Mac 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。关于字体的一些问题,什么不是。也许你需要先明确按摩文件。听起来很熟悉?