[CPyUG] 如何判断用户输入的字符串的编码格式

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[CPyUG] 如何判断用户输入的字符串的编码格式

py-bj_zhu
比如运行  一个接受参数的py程序 python a.py --keywd 谢谢
这个参数传入后是不是被py解释器装换#coding=utf-8  的格式?还是sys.getdefaultencoding的格式?

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 如何判断用户输入的字符串的编码格式

ubunoon-2
python有一个chardet 模块 可以用来检测编码类型

http://pypi.python.org/pypi/chardet

在 2011年12月14日 下午6:24,为善去恶 <[hidden email]>写道:
比如运行  一个接受参数的py程序 python a.py --keywd 谢谢
这个参数传入后是不是被py解释器装换#coding=utf-8  的格式?还是sys.getdefaultencoding的格式?

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html



--
To be pythoner
My blog: http://www.cnblogs.com/ubunoon/
珍珠饰品:http://zjyuezz.cn.alibaba.com/


--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 如何判断用户输入的字符串的编码格式

lan soda
In reply to this post by py-bj_zhu
这个跟shell的编码有关。并且要检查sys.getdefaultencoding

2011/12/14, 为善去恶 <[hidden email]>:

> 比如运行  一个接受参数的py程序 python a.py --keywd 谢谢
> 这个参数传入后是不是被py解释器装换#coding=utf-8  的格式?还是sys.getdefaultencoding的格式?
>
> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: [hidden email]
> 退订: [hidden email] (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug
> http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
>

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

[CPyUG] Re: 如何判断用户输入的字符串的编码格式

py-bj_zhu
In reply to this post by py-bj_zhu
问题已经解决:
用sys.getfilesystemencoding()就能获取当前编码格式了!

On 12月14日, 下午6时24分, 为善去恶 <[hidden email]> wrote:
> 比如运行  一个接受参数的py程序 python a.py --keywd 谢谢
> 这个参数传入后是不是被py解释器装换#coding=utf-8  的格式?还是sys.getdefaultencoding的格式?

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

[CPyUG] Re: 如何判断用户输入的字符串的编码格式

py-bj_zhu
多谢
ubunoon

Lan Soda

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] Re: 如何判断用户输入的字符串的编码格式

lan soda
昨天用手机发的,没有细说。我还是多唠叨一点。
你只用sys.
getdefaultencoding来decode是会有问题的

举个例子,在windows下,
cmd的编码默认为gb2312,故如下调用:
test.py 我是中文参数
这样在test.
py中拿到的这个参数是gb2312编码的str
而python解释器默认的sys.
getdefaultencoding默认是ascii,故你用来decode中文会出错

而在ubuntu下,shell的默认编码是utf-8,
而sys.getdefaultencoding同样默认是ascii,故也不能直接拿来decode

也会有其他的情况,在windows上执行的eclipse+pydev会把sys.
setdefaultencoding设置成gb2312,而在ubuntu上则会设置成utf-8,也就是说pydev会让启动的python解释器保持跟系统的默认编码一致

所以个人建议的做法是,在程序的一开始就sys.
setdefaultencoding为一个固定的编码,这样你就知道任何需要编码解码的地方,系统的行为是怎样的。然后,如果你能确定你的程序的执行环境,例如固定在ubuntu的shell里,那么你拿到参数就直接写死用utf-8解码,否则,还是用灵活点的方法,可以用二楼提到的chardet

希望对你能有所帮助


在 2011年12月14日 下午9:20,为善去恶 <[hidden email]>写道:
多谢
ubunoon

Lan Soda

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] Re: 如何判断用户输入的字符串的编码格式

windwiny
系统默认 coding 可以查 locale.getdefaultlocale()[1]


在 2011年12月15日 上午10:39,Lan Soda <[hidden email]>写道:
昨天用手机发的,没有细说。我还是多唠叨一点。
你只用sys.
getdefaultencoding来decode是会有问题的

举个例子,在windows下,
cmd的编码默认为gb2312,故如下调用:
test.py 我是中文参数
这样在test.
py中拿到的这个参数是gb2312编码的str
而python解释器默认的sys.
getdefaultencoding默认是ascii,故你用来decode中文会出错

而在ubuntu下,shell的默认编码是utf-8,
而sys.getdefaultencoding同样默认是ascii,故也不能直接拿来decode

也会有其他的情况,在windows上执行的eclipse+pydev会把sys.
setdefaultencoding设置成gb2312,而在ubuntu上则会设置成utf-8,也就是说pydev会让启动的python解释器保持跟系统的默认编码一致

所以个人建议的做法是,在程序的一开始就sys.
setdefaultencoding为一个固定的编码,这样你就知道任何需要编码解码的地方,系统的行为是怎样的。然后,如果你能确定你的程序的执行环境,例如固定在ubuntu的shell里,那么你拿到参数就直接写死用utf-8解码,否则,还是用灵活点的方法,可以用二楼提到的chardet

希望对你能有所帮助


在 2011年12月14日 下午9:20,为善去恶 <[hidden email]>写道:

多谢
ubunoon

Lan Soda

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html