=python中的encode,decode方法=
首先,要知道encode是 unicode转换成str。decode是str转换成unicode。
下文中,u代表unicode类型的变量,s代表str类型的变量。
u.encode('...')基本上总是能成功的,只要你填写了正确的编码。就像任何文件都可以压缩成zip文件。
s.decode('...')经常是会出错的,因为str是什么“编码”取决于上下文,当你解码的时候需要确保s是用什么编码的。就像,打开zip文
件的时候,你要确保它确实是zip文件,而不仅仅是伪造了扩展名的zip文件。
u.decode(),s.encode()不建议使用,s.encode相当于s.decode().encode()首先用默认编码(一般是
ascii)转换成unicode在进行encode。
=关于#coding=utf8=
当你在py文件的第一行中,写了这句话,并确实按照这个编码保存了文本的话,那么这句话有以下几个功能。
1.使得词法分析器能正常运作,对于注释中的中文不报错了。
2.对于u"中文"这样literal string能知道两个引号中的内容是utf8编码的,然后能正确转换成unicode
3."中文"对于这样的literal string你会知道,这中间的内容是utf8编码,然后就可以正确转换成其它编码或unicode了。
没有写完,先码那么多字,以后再来补充,这里不是wiki,太麻烦了。
等待更新,具体操作还是来一段的好。这个以后不要太久,怕你自己找不到哈。另外对于计算机中保存的普通文本如何确认其编码?
等待更新,具体操作还是来一段的好。这个以后不要太久,怕你自己找不到哈。另外对于计算机中保存的普通文本如何确认其编码?
插件fencview.vim,锦上添花
--
不是所有的特仑苏都是牛奶
一般人会认为Unicode(广义)统一了编码,其实不然。Unicode不是唯一的编码,而一大堆编码的统称。但是Windows下Unicode
(狭义)一般特指UCS2,也就是UTF-16/LE
http://en.wikipedia.org/wiki/UTF-16/UCS-2#Use_in_major_operating_systems_and_environments
.decode() 方法有第三个参数,好多人不知道:
decode( [encoding[, errors]])
Decodes the string using the codec registered for encoding. encoding
defaults to the default string encoding. errors may be given to set a
different error handling scheme. The default is 'strict', meaning that
encoding errors raise UnicodeError. Other possible values are
'ignore', 'replace' and any other name registered via
codecs.register_error, see section 4.8.1. New in version 2.2. Changed
in version 2.3: Support for other error handling schemes added.
我比较喜欢用replace。呵呵。
主要有一条非常容易误解:
一般人会认为Unicode(广义)统一了编码,其实不然。Unicode不是唯一的编码,而一大堆编码的统称。但是Windows下Unicode
(狭义)一般特指UCS2,也就是UTF-16/LE
这个非常好,但还不是很明白将“文本”转换为“字节流”。(在python中:unicode变成str)
对,平时工作和自用在unix平台,从来没有遇到编码问题。
On 11月11日, 上午12时49分, luzhou tang <tangluz...@gmail.com> wrote:
> 我也说两句。我对编码的研究相对比较深一些。因为工作中也经常遇到乱码,于是在05年,对编码专门做过研究,并在公司刊物上发过文章,最后形成了一个教材,每年-在公司给新员工都讲一遍。于是项目中遇到乱码的问题就能很快的定位并解决了。
> 理论上,从一个字符到具体的编码,会经过以下几个概念。
> 字符集(Abstract character repertoire)
> 编码字符集(Coded character set)
> 字符编码方式(Character encoding form)
> 字符编码方案(Character encoding scheme )
>
> 字符集:就算一堆抽象的字符,如所有中文。字符集的定义是抽象的,与计算机无关。
> 编码字符集:是一个从整数集子集到字符集抽象元素的映射。即给抽象的字符编上数字。如gb2312中的定义的字符,每个字符都有个整数和它对应。一个整数只对应-着一个字符。反过来,则不一定是。这里所说的映射关系,是数学意义上的映射关系。编码字符集也是与计算机无关的。unicode字符集也在这一层。
> 字符编码方式:这个开始与计算机有关了。编码字符集的编码点在计算机里的具体表现形式。通俗的说,意思就是怎么样才能将字符所对应的整数的放进计算机内存,或文-件、或网络中。于是,不同人有不同的实现方式,所谓的万码奔腾,就是指这个。gb2312,utf-8,utf-16,utf-32等都在这一层。
> 字符编码方案:这个更加与计算机密切相关。具体是与操作系统密切相关。主要是解决大小字节序的问题。对于UTF-16和UTF-32
> 编码,Unicode都支持big-endian 和 little-endian两种编码方案。
> 一般来说,我们所说的编码,都在第三层完成。具体到一个软件系统中,则很复杂。
> 浏览器-apache-tomcat(包括tomcat内部的jsp编码、编译,文件读取)-数据库之间,只要存在数据交互,就有可能发生编码不一致,如果在读-取数据时,没有正确的decode和encode,出现乱码就是家常便饭了。http://mao2.com
> 2009/11/10 Samuel Ji <princeofdatamin...@gmail.com>
>
>
>
>
>
> > 2009/11/9 est <electronix...@gmail.com>
>
> > 主要有一条非常容易误解:
>
> >> 一般人会认为Unicode(广义)统一了编码,其实不然。Unicode不是唯一的编码,而一大堆编码的统称。但是Windows下Unicode
> >> (狭义)一般特指UCS2,也就是UTF-16/LE
>
> > unicode作为字符集(ucs)是唯一的,编码方案(utf)才是有很多种
>
> >>http://en.wikipedia.org/wiki/UTF-16/UCS-2#Use_in_major_operating_syst...
> >> > 没有写完,先码那么多字,以后再来补充,这里不是wiki,太麻烦了。- 隐藏被引用文字 -
>
> - 显示引用的文字 -
用什么做分隔符都可以,就是字符串类型的数据要能转义。CSV就很好啊.
--
Best Regards,
Leo Jay
2009/11/11 Jiahua Huang <jhuang...@gmail.com>:
> 如果不是 GBK、UTF16 啥的有 \0 字节的编码,
> 用 \0 来作为分割符挺好吧
>
用什么做分隔符都可以,就是字符串类型的数据要能转义。CSV就很好啊.
2009/11/11 反过来走走 <wmji...@gmail.com>:
decode是str转换成unicode。”
另:前面某仁兄提到的编码和字符的分层,疏忽了glyph的问题
当然也存在一个不需要指明编码的方法。我觉得这个很不好,因为它使用系统的默认编码。不利于移植。
2009/11/10 Yiding He <yidi...@gmail.com>:
--
CHEN,Zi-zhao
wi...@mrchen.info
2009/11/11 MuSheng <mu....@gmail.com>:
--
CHEN,Zi-zhao
wi...@mrchen.info
很多时候是不得不用的
比如cygwin项目,不用cmd你让他用什么?
cygwin下有mintty,可以很好支持utf8的显示——不过我用的是cygwin1.7beta,在日文系统下可以正确显示中文路径了。cmd和rxvt怎么整也是乱码
rxvt-unicode估计也可以,但不知为啥要依赖于X,所以没有试过
--
不是所有的特仑苏都是牛奶