python:unicode问题

Ole*_*nko 8 python unicode

我正在尝试解码从文件中获取的字符串:

file = open ("./Downloads/lamp-post.csv", 'r')
data = file.readlines()
data[0]
Run Code Online (Sandbox Code Playgroud)

"\ XFF\xfeK\x00e\x00y\x00w\x00o\x00r\x00d\X00 \吨\ x00C\x00o\x00m\x00p\x00e\x00t\x00i\x00t\x00i\x00o\x00n\X00 \吨\ x00G\x00l\x00o\x00b\x00a\x00l\x00\x00M\x00o\x00n\x00t\x00h\x00l\x00y\x00\x00S\x00e\x00a\x00r\x00c\x00h\x00e\x00s\x00\t\x00D\x00e\x00c\x00\x002\x000\x001\x000\x00\t\x00N\x00o\x00v\x00\x002\x000\x001\x000\x00\t\x00O\x00c\x00t\x00\x002\x000\x001\x000\x00\t\x00S\x00e\x00p\x00\x002\x000\x001\x000\x00\t\x00A\x00u\x00g\x00\x002\x000\x001\x000\x00\t\x00J\x00u\x00l\x00\x002\x000\x001\x000\x00\t\x00J\x00u\x00n\x00\x002\x000\x001\x000\x00\t\x00M\x00a\x00y\x00\x002\x000\x001\x000\x00\t\x00A\x00p\x00r\x00\x002\x000\x001\x000\x00\t\x00M\x00a\x00r\x00\x002\x000\x001\x000\x00\t\x00F\x00e\x00b\x00\x002\x000\x001\x000\x00\t\x00J\x00a\x00n\x00\x002\x000\x001\x000\x00\t\x00A\x00d\x00\x00s\x00h\x00a\x00r\x00e\x00\t\x00S\x00e\x00a\x00r\x00c\x00h\x00\x00s\x00h\x00a\x00r\x00e\x00\t\x00E\x00s\x00t\x00i\x00m\x00a\x00t\x00e\x00d\x00\x00A\x00v\x00g\x00.\ x00\x00C\x00P\x00C\x00\t\x00E\x00x\x 00t\x00r\x00a\x00c\x00t\x00e\x00d\x00\x00F\x00r\x00o\x00m\x00\x00W\x00e\x00b\x00\x00P\x00a\x00g\x00e\x00\t\x00L\x00o\x00c\x00a\x00l\x00\x00M\x00o\x00n\x00t\x00h\x00l\x00y\x00\x00S\x00e\x00a\x00r\x00c\x00h\x00e\x00s\x00 \n'

添加忽略并没有真正帮助...:

在[69]中:数据[2]输出[69]:u'\ u6700\u6100\u7200\u6400\u6500\u6e00\u2000\u6c00\u6100\u6d00\u7000\u2000\u7000\u6f00\u7300\u7400\u0900\U3000\u2e00\u3900\U3400\u0900\u3800\u3800\U3000\u0900\u2d00\u0900\U3300\U3200\U3000\u0900\U3300\u3900\U3000\u0900\U3300\u3900\U3000\u0900\U3400\u3800\U3000\u0900\U3500\u3900\U3000\u0900\U3500\u3900\U3000\u0900\u3700\U3200\U3000\u0900\u3700\U3200\U3000\u0900\U3300\u3900\U3000\u0900\U3300\U3200\U3000\u0900\U3200\u3600\U3000\u0900\u2d00\u0900\u2d00\u0900\UA300\U3200\u2e00\u3100\u3800\u0900\u2d00\u0900\U3400\u3800\U3000\u0a00'

在[70]中:data [2] .decode("utf-8","replace")---------------------------- -----------------------------------------------追溯(大多数最近的电话)

/ Users/oleg/in()

/opt/local/lib/python2.5/encodings/utf_8.py in decode(输入,错误)14 15 def decode(输入,错误='严格'):---> 16返回codecs.utf_8_decode(输入,错误) ,True)17 18类IncrementalEncoder(codecs.IncrementalEncoder):

:'ascii'编解码器无法编码位置0-87中的字符:序数不在范围内(128)

在[71]中:

Sve*_*ach 15

这看起来像UTF-16数据.所以试试吧

data[0].rstrip("\n").decode("utf-16")
Run Code Online (Sandbox Code Playgroud)

编辑(供您更新):尝试一次解码整个文件,即

data = open(...).read()
data.decode("utf-16")
Run Code Online (Sandbox Code Playgroud)

问题是UTF-16中的换行符是"\n\x00",但是使用readlines()将在"\n"处拆分,为下一行留下"\ x00"字符.


tzo*_*zot 7

此文件是UTF-16-LE编码文件,带有初始BOM.

import codecs

fp= codecs.open("a", "r", "utf-16")
lines= fp.readlines()
Run Code Online (Sandbox Code Playgroud)