Chinaunix

标题: python的unicode字符串 [打印本页]

作者: chouxiaoya8100    时间: 2015-12-11 21:21
标题: python的unicode字符串
python 有unicode串的用法,  如 str1 = u'hello中'

str2= 'hello中'

请问有什么区别?

str1在内存中, 每个字符用  2个字节存储,如果不加u,在内存中多少个字节?
作者: substr函数    时间: 2015-12-11 21:51
本帖最后由 substr函数 于 2015-12-11 21:53 编辑

回复 1# chouxiaoya8100
Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。

# coding: utf-8
# -*- coding: utf-8 -*-

hello 每个字符用  1个字节
中 utf8 3个字节

   
作者: yakczh_cu    时间: 2015-12-11 22:35
{this.p="\u5317\u4EAC,\u4E0A\u6D77,\u5929\u6D25,\u6E56\u5357,\u6E56\u5317,\u5185\u8499\u53E4,\u5E7F\u4E1C,\u5E7F\u897F,\u91CD\u5E86,\u56DB\u5DDD,\u5C71\u4E1C,\u6CB3\u5357,\u6CB3\u5317,\u5C71\u897F,\u8D35\u5DDE,\u9ED1\u9F99\u6C5F,\u798F\u5EFA,\u6D59\u6C5F,\u6C5F\u82CF,\u6C5F\u897F,\u6D77\u5357,\u9655\u897F".split(",");this.n="\u5F20,\u5218,\u5468,\u5434,\u6731,\u9648,\u7530,\u949F,\u9A6C,\u97E9,\u987E,\u738B,\u674E,\u5362,\u5D14,\u6BB5,\u80E1,\u6F58,\u8D75,\u6797,\u4EE3,\u82CF,\u845B,\u6BDB,\u848B".split(",");this.a="\u5C0F\u59D0,\u5148\u751F,\u5973\u58EB".split(",");this.m="13,15,18".split(",");this.c=n;this.c1=c.split("^");


文件内容是这种,怎么打印出中文呢?
作者: ma__    时间: 2015-12-12 00:31
  1. >>> print u'\u5317\u4EAC,\u4E0A\u6D77'
  2. 北京,上海
复制代码

作者: chouxiaoya8100    时间: 2015-12-12 13:12
回复 4# ma__


为什么 中国,上海之间的逗号, 不能用\u这种表示法?

而直接书写逗号就可以了。


作者: chouxiaoya8100    时间: 2015-12-12 13:15
回复 2# substr函数


是不是这么理解?

字符串的编码在内存中是utf8, 这个是python解释器 规定!!

但 书写的代码所存的文件格式编码(存在磁盘中的),这种编码方式是有用户规定!!1





   
作者: chouxiaoya8100    时间: 2015-12-12 21:08
还有人吗? 帮忙看看
作者: ma__    时间: 2015-12-13 00:52
>>> str1 = u'hello中'
>>> type(str1)
<type 'unicode'>
>>> str2= 'hello中'
>>> type(str2)
<type 'str'>

默认字符串都用ASCII编码,加个‘u前缀的方式声明unicode字符串’

# -*- coding: utf-8 -*-     该文件中的字符串都以utf8编码
作者: chouxiaoya8100    时间: 2015-12-13 12:02
回复 8# ma__


指出一个错误:

ansi不是asicc, asicc只是一个字符表,8个比特位,无法存储汉字。 所以代码中的汉字‘中’, 明显是ansi。

ansi是指 gb2312, gb18030一类的多字节编码方式。这类编码确实是一个中文字符2个字节,一个英文字符1个字节,


但是如果源文件换了编码方式,那么中文字符的长度可能就变化,你比如换成utf-8。


————————分割线——————————

为了统一字符在内存中的长度, 最好强制 python源文件的编码方式。

不对的,请指出。





   
作者: substr函数    时间: 2015-12-14 11:12
回复 9# chouxiaoya8100

ANSI
美国国家标准学会(American National Standards Institute,ANSI)
是负责制定美国国家标准的非营利组织。

ASCII
(发音:英语发音:/ˈæski/ ASS-kee[1],American Standard Code for Information Interchange,美国信息交换标准代码)
是基于拉丁字母的一套电脑编码系统。
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2