关于python的unicode,str,编码,解码,乱码,以及关于它们我能所想到的一些

571 views
Skip to first unread message

heroboy

unread,
Nov 8, 2009, 6:07:50 PM11/8/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
python是个容易出现编码问题的语言。所以,我按照我的理解写下下面这些文字。
=首先,要了解几个概念。=
*字节:计算机数据的表示。8位二进制。可以表示无符号整数:0-255。下文,用“字节流”表示“字节”组成的串。
*字符:英文字符“abc”,或者中文字符“你我他”。字符本身不知道如何在计算机中保存。下文中,会避免使用“字符串”这个词,而用“文本”来表
示“字符”组成的串。
*编码(动词):按照某种规则(这个规则称为:编码(名词))将“文本”转换为“字节流”。(在python中:unicode变成str)
*解码(动词):将“字节流”按照某种规则转换成“文本”。(在python中:str变成unicode)
**实际上,任何东西在计算机中表示,都需要编码。例如,视频要编码然后保存在文件中,播放的时候需要解码才能观看。
unicode:unicode定义了,一个“字符”和一个“数字”的对应,但是并没有规定这个“数字”在计算机中怎么保存。(就像在C中,一个整数既
可以是int,也可以是short。unicode没有规定用int还是用short来表示一个“字符”)
utf8:unicode实现。它使用unicode定义的“字符”“数字”映射,进而规定了,如何在计算机中保存这个数字。其它的utf16等都是
unicode实现。
gbk:类似utf8这样的“编码”。但是它没有使用unicode定义的“字符”“数字”映射,而是使用了另一套的映射方法。而且,它还定义了如何在
计算机中保存。

=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,太麻烦了。

Nidayes

unread,
Nov 8, 2009, 7:10:29 PM11/8/09
to pyth...@googlegroups.com
等待更新,具体操作还是来一段的好。这个以后不要太久,怕你自己找不到哈。另外对于计算机中保存的普通文本如何确认其编码?


诚子

unread,
Nov 8, 2009, 8:56:49 PM11/8/09
to pyth...@googlegroups.com
notepad++

2009/11/9 Nidayes <nid...@gmail.com>

等待更新,具体操作还是来一段的好。这个以后不要太久,怕你自己找不到哈。另外对于计算机中保存的普通文本如何确认其编码?







--
my.unix-center.net/~WeiZhicheng

大熊

unread,
Nov 8, 2009, 9:30:17 PM11/8/09
to pyth...@googlegroups.com
gvim
:w ++enc=编码
:e ++enc=编码

插件fencview.vim,锦上添花

--
不是所有的特仑苏都是牛奶

est

unread,
Nov 9, 2009, 8:47:57 AM11/9/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
主要有一条非常容易误解:

一般人会认为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。呵呵。

Samuel Ji

unread,
Nov 9, 2009, 1:01:58 PM11/9/09
to pyth...@googlegroups.com


2009/11/9 est <electr...@gmail.com>

主要有一条非常容易误解:

一般人会认为Unicode(广义)统一了编码,其实不然。Unicode不是唯一的编码,而一大堆编码的统称。但是Windows下Unicode
(狭义)一般特指UCS2,也就是UTF-16/LE
unicode作为字符集(ucs)是唯一的,编码方案(utf)才是有很多种

Heroboy

unread,
Nov 9, 2009, 4:05:51 PM11/9/09
to pyth...@googlegroups.com
=Python编码和Windows控制台=
我发现,很多初学者出错的地方都在print语句,这牵涉到控制台的输出。我不了解linux,所以只说控制台的。
首先,Windows的控制台确实是unicode(utf16_le编码)的,或者更准确的说使用字符为单位输出文本的。
但是,程序的执行是可以被重定向到文件的,而文件的单位是“字节”。
所以,对于C运行时的函数printf之类的,输出必须有一个编码,把文本转换成字节。可能是为了兼容95,98,
没有使用unicode的编码,而是mbcs(不是gbk之类的)。
windows的mbcs,也就是ansi,它会在不同语言的windows中使用不同的编码,在中文的windows中就是gb系列的编码。
这造成了同一个文本,在不同语言的windows中是不兼容的。
现在我们知道了,如果你要在windows的控制台中输出文本,它的编码一定要是“mbcs”。
对于python的unicode变量,使用print输出的话,会使用sys.getfilesystemencoding()返回的编码,把它变成str。
如果是一个utf8编码str变量,那么就需要 print s.decode('utf8').encode('mbcs')

最后,对于str变量,file文件读取的内容,urllib得到的网络上的内容,都是以“字节”形式的。
它们如果确实是一段“文本”,比如你想print出来看看。那么你必须知道它们的编码。然后decode成unicode。
如何知道它们的编码:
1.事先约定。(比如这个文本文件就是你自己用utf8编码保存的)
2.协议。(python文件第一行的#coding=utf8,html中的<meta>等)
2.猜。

曹源

unread,
Nov 9, 2009, 10:39:17 PM11/9/09
to pyth...@googlegroups.com
这个非常好,但还不是很明白
将“文本”转换为“字节流”。(在python中:unicode变成str)
按字面上的意义理解应该是  str (文本)变成unicode

每次遇见解码问题,我总是要折腾半天,都还好的是总算能折腾出来,不知其所以然啊!

2009/11/10 Heroboy <yangw...@gmail.com>

Chen GUO

unread,
Nov 10, 2009, 12:10:05 AM11/10/09
to pyth...@googlegroups.com
呵呵,您找本I18N/L10N的书从头翻翻,先把理论搞顺当

Yiding He

unread,
Nov 10, 2009, 12:12:32 AM11/10/09
to pyth...@googlegroups.com
将字符与字节的概念区分开来是很重要的。Java 一直就是这样,Python也开始这么做了,Ruby 貌似还在混乱当中。


--
                      致
礼!
                        yidi...@gmail.com

Samuel Ji

unread,
Nov 10, 2009, 12:14:11 AM11/10/09
to pyth...@googlegroups.com


2009/11/10 曹源 <lucas...@gmail.com>

这个非常好,但还不是很明白
将“文本”转换为“字节流”。(在python中:unicode变成str)
"最后,对于str变量,file文件读取的内容,urllib得到的网络上的内容,都是以“字节”形式的。"
虽然文件或者网页是文本的,但是在保存或者传输时已经被编码成bytes了,所以用"rb"打开的file和从socket读取的流是基于字节的.
"它们如果确实是一段“文本”,比如你想print出来看看。那么你必须知道它们的编码。然后decode成unicode。"
这里的加引号的"文本",其实还是字节流(bytes),而不是真正的文本(unicode),只是说明我们知道他是可以解码成文本的.
在解码的时候,如果是基于约定的,那就可以直接从指定地方读取如BOM或者python文件的指定coding或者网页的meta,就可以正确解码,
但是现在很多文件/网页虽然指定了编码,但是文件格式实际却使用了其他的编码(比如py文件指定了coding=utf8,但是你还是可以保存成ansi--记事本的默认编码),这种情况下真实的编码就需要去猜了
解码了的文本只存在运行环境中,如果你需要打印/保存/输出给数据库/网络传递,就又需要一次编码过程,这个编码与上面的编码没有关系,只是依赖于你的选择,但是这个编码也不是可以随便选择的,因为编码后的bytes如果又需要传递给其他人/环境,那么如果你的编码也不遵循约定,又给下一个人/环境造成了困扰,于是递归之~~~~

Jiahua Huang

unread,
Nov 10, 2009, 2:54:11 AM11/10/09
to pyth...@googlegroups.com
上次有人说 ta 不懂编码,却在 Linux 下没遇到过编码问题,
也就是因为 Linux 下基本统一 utf8 编码,
使得程序可以直接作为“原始字符串”使用。

而另一个鼓吹 Oracle GBK 的家伙,则是因为丫没有用控制台 print 的情况,只是用在 GBK 的网页里,
自然也是当做“原始字符串”使用没问题。


所以说起来,那些抱怨 Python 编码问题的,应该改为抱怨你自己干吗要用那破烂 cmd.exe

2009/11/10 Heroboy <yangw...@gmail.com>

luzhou tang

unread,
Nov 10, 2009, 11:49:42 AM11/10/09
to pyth...@googlegroups.com
我也说两句。我对编码的研究相对比较深一些。因为工作中也经常遇到乱码,于是在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,出现乱码就是家常便饭了。
2009/11/10 Samuel Ji <princeofd...@gmail.com>

No.0023

unread,
Nov 10, 2009, 8:06:20 PM11/10/09
to pyth...@googlegroups.com
On Tue, Nov 10, 2009 at 03:54:11PM +0800, Jiahua Huang wrote:
> 上次有人说 ta 不懂编码,却在 Linux 下没遇到过编码问题,
> 也就是因为 Linux 下基本统一 utf8 编码,
> 使得程序可以直接作为“原始字符串”使用。
>
> 而另一个鼓吹 Oracle GBK 的家伙,则是因为丫没有用控制台 print 的情况,只是用在
> GBK 的网页里,
> 自然也是当做“原始字符串”使用没问题。
>
>
> 所以说起来,那些抱怨 Python 编码问题的,应该改为抱怨你自己干吗要用那破烂
> cmd.exe

对,平时工作和自用在unix平台,从来没有遇到编码问题。

反过来走走

unread,
Nov 10, 2009, 8:11:11 PM11/10/09
to pyth...@googlegroups.com
说的没错,我不懂编码,但是从来没有碰到的乱码。

2009/11/10 Jiahua Huang <jhuang...@gmail.com>

MuSheng

unread,
Nov 10, 2009, 8:22:20 PM11/10/09
to pyth...@googlegroups.com
寫代碼和用代碼都在同一環境,是不會有亂碼出現的。

gb2312、gb18030、big5、utf8,簡體、繁體,linux、windows,shell、GUI、web等不同環境、不同方式試下。

Jean.Xu

unread,
Nov 10, 2009, 9:44:00 PM11/10/09
to pyth...@googlegroups.com
能否分享一下你的教材
谢谢

2009/11/11 luzhou tang <tangl...@gmail.com>

曹源

unread,
Nov 11, 2009, 1:27:57 AM11/11/09
to pyth...@googlegroups.com
同问?能否分享教材!

2009/11/11 luzhou tang <tangl...@gmail.com>

小苗

unread,
Nov 11, 2009, 3:06:04 AM11/11/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
看了这一系列评论,感觉您总结的最好,受教育了,谢

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,太麻烦了。- 隐藏被引用文字 -
>
> - 显示引用的文字 -

luzhou tang

unread,
Nov 11, 2009, 4:54:55 AM11/11/09
to pyth...@googlegroups.com
抱歉,因为教材属于公司财产,目前暂时不能上传。但如果有具体问题,可以一起探讨。
另,很多unix下c的开发,他们没有遇到乱码,是因为他们的程序都是后台程序居多,一般情况下,这些程序并不用在意具体的字符串内容,一般是将这些字符串直接透传(即原样输入,原样输出),故不用在意字符串编码的问题。 但是,由于编码问题引起后台程序的bug还是有可能发生的。
以前的项目中,我们的有个处理帐单的后台C程序,帐单记录的字段是使用 弯弯号~隔开的。如 用户名~月份~金额。程序一直跑的很好。结果,有天,程序崩溃了,后来发现有个用户名是外国的,经过编码后的字节有一个竟然是弯弯号!
2009/11/11 Jean.Xu <xuze...@gmail.com>

victor lee

unread,
Nov 11, 2009, 5:17:05 AM11/11/09
to pyth...@googlegroups.com
不想打击lz积极性,但是到了3后,一切就禾口言皆了。

2009/11/11 luzhou tang <tangl...@gmail.com>

Nidayes

unread,
Nov 11, 2009, 5:26:00 AM11/11/09
to pyth...@googlegroups.com
已存档。

2009/11/11 victor lee <victor...@gmail.com>

Jiahua Huang

unread,
Nov 11, 2009, 5:31:33 AM11/11/09
to pyth...@googlegroups.com
如果不是 GBK、UTF16 啥的有 \0 字节的编码,
用 \0 来作为分割符挺好吧

2009/11/11 luzhou tang <tangl...@gmail.com>

Leo Jay

unread,
Nov 11, 2009, 6:04:29 AM11/11/09
to pyth...@googlegroups.com
2009/11/11 Jiahua Huang <jhuang...@gmail.com>:

> 如果不是 GBK、UTF16 啥的有 \0 字节的编码,
> 用 \0 来作为分割符挺好吧
>

用什么做分隔符都可以,就是字符串类型的数据要能转义。CSV就很好啊.

--
Best Regards,
Leo Jay

Samuel Ji

unread,
Nov 11, 2009, 6:08:41 AM11/11/09
to pyth...@googlegroups.com


2009/11/11 Leo Jay <python...@gmail.com>

2009/11/11 Jiahua Huang <jhuang...@gmail.com>:
> 如果不是 GBK、UTF16 啥的有 \0 字节的编码,
> 用 \0 来作为分割符挺好吧
>

用什么做分隔符都可以,就是字符串类型的数据要能转义。CSV就很好啊.

CSV在unix编程艺术中是被批判的
 

Leo Jay

unread,
Nov 11, 2009, 6:12:48 AM11/11/09
to pyth...@googlegroups.com
2009/11/11 Samuel Ji <princeofd...@gmail.com>:

好用就好了,管人家说什么。
Guido还不喜欢XML呢

ender

unread,
Nov 11, 2009, 6:15:24 AM11/11/09
to pyth...@googlegroups.com
或者反过来想一想
用破烂cmd逼得ta不得不面对编码,并彻底弄懂此类问题
不懂编码却没遇到过编码问题的ta则开始产生linux c程序不需要考虑编码问题的错觉
对一个技术人员而言,那类更好呢?

2009/11/10 Jiahua Huang <jhuang...@gmail.com>

Jiahua Huang

unread,
Nov 11, 2009, 7:12:40 AM11/11/09
to pyth...@googlegroups.com
你或说,谁叫 ta 们在 Windows 下也硬要用那破烂控制台程序呢

2009/11/11 ender <crazy...@gmail.com>

反过来走走

unread,
Nov 11, 2009, 8:19:10 AM11/11/09
to pyth...@googlegroups.com
兄弟。
在linux 桌面不景气的时候。
除了 winxp 还有啥选择?

2009/11/11 Jiahua Huang <jhuang...@gmail.com>

Yin Wei

unread,
Nov 11, 2009, 8:23:34 AM11/11/09
to pyth...@googlegroups.com
MacOS X

2009/11/11 反过来走走 <wmji...@gmail.com>:

反过来走走

unread,
Nov 11, 2009, 8:35:33 AM11/11/09
to pyth...@googlegroups.com
买不起,嘿嘿!

2009/11/11 Yin Wei <xchan...@gmail.com>
MacOS X

Jiahua Huang

unread,
Nov 11, 2009, 8:38:18 AM11/11/09
to pyth...@googlegroups.com
不扯你不用的 “Linux”,

在 Windows 下,Python 又不是没有 GUI,
何苦一定要 cmd

jay

unread,
Nov 11, 2009, 10:08:25 AM11/11/09
to pyth...@googlegroups.com
我不是很懂,但感觉有些地方写错了,见教
“首先,要知道encode是 unicode转换成str。
decode是str转换成unicode。

>>> '编码'.decode('gbk')
u'\u7f16\u7801'
>>> u'\u7f16\u7801'.encode('gbk')
'\xb1\xe0\xc2\xeb'
>>> print u'\u7f16\u7801'.encode('gbk')
编码
>>>
上面从CMD控制台拷贝出来,我的理解:
'编码'两个字本来是cmd上的gbk编码的两个字;decode把它还原到"unicode本体",u'\u7f16\u7801'
encode是把本体转化到另外一种表现形式,比如gbk



2009/11/9 heroboy <yangw...@gmail.com>



--
----------------------------
http://blog.csdn.net/wjstone
---------------------------

Chen GUO

unread,
Nov 12, 2009, 12:21:17 AM11/12/09
to pyth...@googlegroups.com
MAC OS X很便宜的,比MAC的机器还便宜,更比IBM便宜……我是说,买到同样的性能

另:前面某仁兄提到的编码和字符的分层,疏忽了glyph的问题

CHEN,Zi-zhao

unread,
Nov 12, 2009, 7:27:57 PM11/12/09
to pyth...@googlegroups.com
对。java的byte[]和String之间进行转化的时候,要指明编码。
String(byte[] bytes, String charsetName)
byte[] String.getBytes(String charsetName)

当然也存在一个不需要指明编码的方法。我觉得这个很不好,因为它使用系统的默认编码。不利于移植。

2009/11/10 Yiding He <yidi...@gmail.com>:

--
CHEN,Zi-zhao
wi...@mrchen.info

CHEN,Zi-zhao

unread,
Nov 12, 2009, 7:31:15 PM11/12/09
to pyth...@googlegroups.com
不用切换操作系统。只需要改变下Windows系统区域,就可以体验乱码的感觉了。

2009/11/11 MuSheng <mu....@gmail.com>:

--
CHEN,Zi-zhao
wi...@mrchen.info

ender

unread,
Nov 12, 2009, 9:26:31 PM11/12/09
to pyth...@googlegroups.com
很多时候是不得不用的

比如cygwin项目,不用cmd你让他用什么?

另外说个题外话:组里有没有人有兴趣把IDLE改改当成windows的console?CMD确实是,太lj了。。。

2009/11/11 Jiahua Huang <jhuang...@gmail.com>

ubunoon

unread,
Nov 12, 2009, 9:54:43 PM11/12/09
to pyth...@googlegroups.com
ipython可以帮你做类似的事情。

2009/11/13 ender <crazy...@gmail.com>



--
To be pythoner
My blog: http://www.cnblogs.com/ubunoon/

ubunoon

unread,
Nov 17, 2009, 2:22:04 AM11/17/09
to pyth...@googlegroups.com
今天终于碰到编码问题了,还好,定位的比较快,要不真要惨死了。

c客户端在windows平台下面写了个xml文件,用gb2312保存,但xml标记为utf-8,java服务器端用utf-8解码xml文件,由于xml文件中存在中文,导致java服务器端解码失败,从而影响了业务运行。

希望大家以后还是多多注意编码问题吧!

2009/11/13 ubunoon <net...@gmail.com>

Jiahua Huang

unread,
Nov 17, 2009, 3:04:09 AM11/17/09
to pyth...@googlegroups.com


2009/11/13 ender <crazy...@gmail.com>
很多时候是不得不用的

Windows 下的第三方终端很多啊
 
比如cygwin项目,不用cmd你让他用什么?

如果你那么依赖 cygwin 的话,直接用 linux 不行么……

不依赖的话, mingw 以及他的 rxvt 都可以设置 utf8
 

大熊

unread,
Nov 17, 2009, 8:40:39 AM11/17/09
to pyth...@googlegroups.com
2009/11/17 Jiahua Huang <jhuang...@gmail.com>:

>
>
> 2009/11/13 ender <crazy...@gmail.com>
>>
>> 很多时候是不得不用的
>
> Windows 下的第三方终端很多啊
>
>>
>> 比如cygwin项目,不用cmd你让他用什么?
>

cygwin下有mintty,可以很好支持utf8的显示——不过我用的是cygwin1.7beta,在日文系统下可以正确显示中文路径了。cmd和rxvt怎么整也是乱码
rxvt-unicode估计也可以,但不知为啥要依赖于X,所以没有试过

--
不是所有的特仑苏都是牛奶

Chen GUO

unread,
Nov 18, 2009, 12:04:37 AM11/18/09
to pyth...@googlegroups.com
呵呵,这类问题我们这经常有,XML被更新后,UTF8的头没动,但是编码被默认成ASCII,结果整个系统当掉
Reply all
Reply to author
Forward
0 new messages