python中Utf-8字符集的问题

Dic4000 2010-10-25 10:44:01

ch1=u"严"
ch1 #显示的是:u'\xd1\xcf'
print ch1 #显示的是乱码
ch1.getEncode("utf-8") #显示的是:'\xc3\x91\xc3\x8f'


问题:
1:第二行与第一行显示的编码为什么不一样?它们分别代表什么?
2:第三行显示的是乱码,我认为可能是print 只能接受Ansi编码,那么怎样才能打印出ch1中存储的汉字?
...全文
324 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dic4000 2010-11-04
  • 打赏
  • 举报
回复
那就用python3.0以后的版本,Python3在字符编码处理上有很大改进,结构更简明清晰,想出错都难。
matlab2000 2010-10-31
  • 打赏
  • 举报
回复
我工作中遇到的,就是为了用中文,在开头指定了utf-8,然后发现把utf-8的目录名做join之类,好像不行,反正做后就是在 uft-8 gbk 和内部格式间倒来倒去。呵呵。因为中文的有些显示是需要字符串是gbk的。如果是utf-8的,就搞不定。希望python以后统一算了。
Dic4000 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 amu9900 的回复:]
ch1=u"严" #你这里是理想的定义一个unicode的字符串,但是其实编码为gbk再用u""套起来了
你的ide的问题
[/Quote]

恩,谢谢。我先是在交互式解释器中写的上述代码,后来我把这些语句用脚本写,脚本里的第一行规定了编码方式,然后执行就可以显示了,但还有疑惑想向大家请教下。


#coding: utf-8
ch1=u"严"
print ch1
bs=ch1.encode("utf-8")
print bs

import sys
print sys.getdefaultencoding() #显示Ascii


脚本中的#coding: utf-8 应该是定义文件的编码吧?
用print sys.getdefaultencoding()显示Ascii为何不与我的文件中定义的编码方式一致?
而且不像在交互式解释器中显示“\xc3\x91\xc3\x8f”一样的编码,这又是为什么呢?

这三个问题,向大家请教下



amu9900 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 dic4000 的回复:]
Python code

ch1=u"严"
ch1 #显示的是:u'\xd1\xcf'
print ch1 #显示的是乱码
ch1.getEncode("utf-8") #显示的是:'\xc3\x91\xc3\x8f'



问题:
1:第二行与第一行显示的编码为什么不一样?它们分别代表什么?
2:第三行显示的是乱码,我认为可能是print 只能接受Ansi编码,……
[/Quote]

ch1=u"严" #你这里是理想的定义一个unicode的字符串,但是其实编码为gbk再用u""套起来了

你的ide的问题
八哥Jerry 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feilniu 的回复:]

理解字符编码:
http://topic.csdn.net/u/20100806/18/e4b43f25-1b73-4786-907e-9576d8be7d36.html
[/Quote]


就是这个了……
rednurse 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dic4000 的回复:]
引用 7 楼 feilniu 的回复:

#coding: utf-8是脚本文件的编码
sys.getdefaultencoding是操作系统默认编码


恩,明白了,操作系统默认编码和程序编码不是一个概念。

有没有办法显示出字符的编码呢?现在显示的是汉字

Python code

#coding: utf-8
ch1=u"严"
bs1=ch1.encode("u……
[/Quote]

下载第三方库 chardet
http://chardet.feedparser.org/docs/faq.html
Dic4000 2010-10-26
  • 打赏
  • 举报
回复
发帖晚了,还没看到你另外两个回复
Dic4000 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 feilniu 的回复:]

#coding: utf-8是脚本文件的编码
sys.getdefaultencoding是操作系统默认编码
[/Quote]

恩,明白了,操作系统默认编码和程序编码不是一个概念。

有没有办法显示出字符的编码呢?现在显示的是汉字

#coding: utf-8
ch1=u"严"
bs1=ch1.encode("utf-8")
bs2=ch1.encode("gb2312")
print ch1,bs1,bs2


现在显示的是三个汉字,我想要显示这三个汉字对应的编码进行比较,就像在交互式解释器中显示“\xc3\x91\xc3\x8f”这样的编码,不知道有没有办法?
feilniu 2010-10-26
  • 打赏
  • 举报
回复
Python3在字符编码处理上有很大改进,结构更简明清晰,想出错都难。

# Python 3.1.2
>>> b'\xc3\x91\xc3\x8f'
b'\xc3\x91\xc3\x8f'
>>> _.decode('utf-8')
'ÑÏ'
>>> _.encode('latin1')
b'\xd1\xcf'
>>> '严'
'严'
>>> ch = '严'
>>> ch.encode('gbk')
b'\xd1\xcf'
>>> ch.encode('utf-8')
b'\xe4\xb8\xa5'

feilniu 2010-10-26
  • 打赏
  • 举报
回复
“\xc3\x91\xc3\x8f”怎么来的:

ch1=u"严" #你的IDLE把“严”的字节流“\xd1\xcf”按latin1编码转成了Unicode字符“ÑÏ”
ch1 #显示的是:u'\xd1\xcf'
print ch1 #显示的是乱码
ch1.getEncode("utf-8") #显示的是:'\xc3\x91\xc3\x8f'

feilniu 2010-10-26
  • 打赏
  • 举报
回复
#coding: utf-8是脚本文件的编码
sys.getdefaultencoding是操作系统默认编码
iambic 2010-10-25
  • 打赏
  • 举报
回复
不要在代码里嵌中文。
iambic 2010-10-25
  • 打赏
  • 举报
回复
ch1="严"

37,742

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧