Python论坛  - 讨论区

标题:[python-chinese] Unicode的16进制转换问题

2005年08月09日 星期二 16:31

Gerald Lee leejd80 at gmail.com
Tue Aug 9 16:31:16 HKT 2005

以前大家讨论的都是unicode和各种编码之间的转换,但是我今天突然发现一个问题
就是unicode的内存保存和存在文件里面的16进制的值好像不一样
譬如"中国",在文件中保存为:4E2D56FD,但是我在命令行下面得到的是u'\xd6\xd0\xb9\xfa',值好像不对
暂时也没有摸到如何print16进制的unicode串的好方法,使用:
>>> str=u"中国"
>>> for item in str:
... print "%X"%ord(item)
...
D6
D0
B9
FA
方式取出来的16进制与文件中保存的不一样。

如何才能取出和文件中保存的一样的16进制值啊?好像就是中文有问题,英文没有问题的

-- 
My Blog >> http://leejd.cndev.org
My QQ >> 9847243
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050809/d8164234/attachment-0001.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月09日 星期二 19:54

小楼听雨 hailang_0512 at 163.com
Tue Aug 9 19:54:31 HKT 2005

def foo(par=[]):
    if par is None:
        par = []
        par.append(0)
    print par

foo()
print foo.func_defaults

foo()
print foo.func_defaults

foo([9])
print foo.func_defaults

foo()
print foo.func_defaults

结果是:
[]         
([],) #为什么不是([0],)
[]
([],)
[9]
([],)
[]
([],)
 难道是par.append(0)的问题?
  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050809/c3308545/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月10日 星期三 17:14

马踏飞燕 honeyday.mj at gmail.com
Wed Aug 10 17:14:09 HKT 2005

在 05-8-9,Gerald Lee<leejd80 at gmail.com> 写道:
> 以前大家讨论的都是unicode和各种编码之间的转换,但是我今天突然发现一个问题
> 就是unicode的内存保存和存在文件里面的16进制的值好像不一样
> 譬如"中国",在文件中保存为:4E2D56FD,但是我在命令行下面得到的是u'\xd6\xd0\xb9\xfa',值好像不对
> 暂时也没有摸到如何print16进制的unicode串的好方法,使用:
> >>> str=u"中国"
> >>> for item in str:
> ...     print  "%X"%ord(item)
> ...
> D6
> D0
> B9
> FA
> 方式取出来的16进制与文件中保存的不一样。
> 
> 如何才能取出和文件中保存的一样的16进制值啊?好像就是中文有问题,英文没有问题的
> 
> -- 

看你的情况应该是在中文版的windows下发生的。
其实你的程序打印出的编码并不是unicode编码,而是windows本地默认编码GB2312。

用"你好"这2个字来做测试最明确了。
py>>> str=u"你好"
py>>> for item in str:
...     print "%X"%ord(item)
...
C4
E3
BA
C3
,然后用EditPlus新建一个文本文件,输入"你好",保存。然后用winhex打开显示,就会发现显示的是C4 E3 BA
C3,然后,把这个文件另存为,在另存窗口选择编码为unicode,再看2进制显示,60 4F 7D
59。这才是unicode编码。再另存一编,这回选择UTF-8,看2进制显示,则是 E4 BD A0 E5 A5
BD。这是真正的UTF-8编码。unicode编码比较短,一般是2个字节,而UTF-8是变长的编码,从2到4个字节不等。理论上UTF-8可以使世界上所有语言的所有符号都有一个唯一的编码。

上面你提到的问题应该是python的性质,在很久以前曾经大量的讨论过,你可以翻一翻以前的邮件存档。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月10日 星期三 17:36

Qiangning Hong hongqn at gmail.com
Wed Aug 10 17:36:14 HKT 2005

马踏飞燕 wrote:
> 看你的情况应该是在中文版的windows下发生的。
> 其实你的程序打印出的编码并不是unicode编码,而是windows本地默认编码GB2312。

unicode编码这个说法是不完整的,unicode标准中有很多种编码。

[...]

> ,然后用EditPlus新建一个文本文件,输入"你好",保存。然后用winhex打开显示,就会发现显示的是C4 E3 BA
> C3,然后,把这个文件另存为,在另存窗口选择编码为unicode,再看2进制显示,60 4F 7D
> 59。这才是unicode编码。

这是UTF-16LE编码。

> 再另存一编,这回选择UTF-8,看2进制显示,则是 E4 BD A0 E5 A5
> BD。这是真正的UTF-8编码。unicode编码比较短,一般是2个字节,而UTF-8是变长的编码,从2到4个字节不等。理论上UTF-8可以使世界上所有语言的所有符号都有一个唯一的编码。

对一个字符:

UCS-2用两个字节表示
UCS-4用四个字节表示
UTF-8用1~4个字节表示
UTF-16用2或4个字节表示

以上都属于unicode编码。

> 上面你提到的问题应该是python的性质,在很久以前曾经大量的讨论过,你可以翻一翻以前的邮件存档。


-- 
Qiangning Hong

I'm usually annoyed by IDEs because, for instance, they don't use VIM
as an editor. Since I'm hooked to that, all IDEs I've used so far have
failed to impress me.
    -- Sybren Stuvel @ c.l.python

Get Firefox!
<http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号