+ -
当前位置:首页 → 问答吧 → 求助, Python内Unicode的问题

求助, Python内Unicode的问题

时间:2011-12-23

来源:互联网

我的脚本如下
Python code

# coding=gb2312
a = "论坛";
b = u"论坛";


然后分别将字符串a和b输出到文件。将文件用二进制工具打开,结果两个文件的二进制相同。怎么回事,难道字符串前面的u不起作用?

作者: zhiyajun11   发布时间: 2011-12-23

1.根本没看到你的输出的代码。
2.用什么工具打开的?不会是臭名昭彰的UltraEdit吧?

作者: iambic   发布时间: 2011-12-23

我用的是winhex。
输出代码如下:
Python code

file1 = open("C:\\text1.txt");
file2 = open("C:\\text2.txt");
file1.write(a);
file2.write(b);
file1.close();
file2.close();



引用 1 楼 iambic 的回复:

1.根本没看到你的输出的代码。
2.用什么工具打开的?不会是臭名昭彰的UltraEdit吧?

作者: zhiyajun11   发布时间: 2011-12-23

Python code
file2.write(b.encode('utf-16le'));
# 或者
file2.write(b.encode('utf-16be'));

作者: iambic   发布时间: 2011-12-23

弱弱的问一下,你能执行成功吗?

text1.txt 
text2.txt

刚刚我在xp下试一下,不能这样做
Python code

# -*- coding: gbk -*-
s1 = '中国'
s2 = u'中国'

f1 = open('a.txt', 'w')
f2 = open('b.txt', 'w')

f1.write(s1)
f2.write(s2)  # 报错


是这样的,xp系统默认是gbk编码.

而你的py文件头声明# -*- coding: gbk -*-,说明字符格式为gbk编码.没有问题,那f1.write(s1)写进去是没有问题的,可是当你把'gbk'编码的字符转换为unicode编码时,u'中国'.就会有问题,所以f2.write(s2)会报错.

你的脚本不会报错,可能是楼主的系统默认文件编码格式,或者是你的py版本和我的不一样.造成自动转化为写入文件的编码格式,所以看到的二进制是相同的.

不知道是否能说明白....

作者: userguanguan   发布时间: 2011-12-23

我是没看明白。不过我一般只花半分钟时间看问题,半分钟还不知道在说什么的都当作表达有问题。

作者: iambic   发布时间: 2011-12-23