gpt4 book ai didi

Python2.7 执行作为命令解析 Unicode 字符串给出的语句不正确,但交互式提示做得很好

转载 作者:行者123 更新时间:2023-12-01 03:17:29 25 4
gpt4 key购买 nike

在Python交互提示中:

Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = u'中'
>>> s
u'\u4e2d'
>>> print s

我可以正确打印 Unicode 字符串“中”。
但是当我在 Bash 命令行中这样做时:
python2 -c "s = u'中'; print(repr(s)); print(s)"
我得到的命令的结果是

u'\xe4\xb8\xad'
中

我的终端字符集编码是“UTF-8”。那么,Python的命令行语句有什么问题呢?为什么命令行语句无法正确打印 Unicode 字符串?

谢谢!

最佳答案

这是一个有趣的问题。我尝试深入研究并得出结论,这是 -c 的命令行参数如何在 Python 2 解释器中转换为源代码的问题。

在Python 2中,(unicode shell的)命令行参数中的s = u'中'似乎被翻译成有点像s = u'\xe4\xb8\xad'.就好像它运行一个带有 latin1 编码(例如扩展 ASCII)的脚本文件。而在 Python 3 中,它的翻译有点像 s = u'\u4e2d',因此它可以正确打印。所以,这不是 bash 或终端的问题。

Interpreting source as utf-8:    [73] [20] [3d] [20] [75] [27] [e4 b8 ad] [27]    [s]  [ ]  [=]  [ ]  [u]  [']  [中]        [']Interpreting source as latin-1:    [73] [20] [3d] [20] [75] [27] [e4] [b8] [ad] [27]    [s]  [ ]  [=]  [ ]  [u]  [']  [ä]  [¸]  [­]   [']

Try python2 console:

>>> s = u'\xe4\xb8\xad'
>>> s
u'\xe4\xb8\xad'
>>> print s
中

>>> print u'\xe4'
ä
>>> print u'\xb8'
¸
>>> print u'\xad'
­

正如我所说,这就好像您编写了源代码,将其声明为 latin1 编码,并使用 python2 运行。尝试将其保存到文件中并使用 python2 运行:

# coding=latin1
s = u'中'
print repr(s)
print s

输出:

u'\xe4\xb8\xad'
中

这就是我的结论,问题在于如何将-c的命令行参数“解码”为Python 2中的源代码,就像使用latin1解码一样.

因此,解决此问题的方法是:

echo -e "# coding=utf8\ns = u'中'; print(repr(s)); print(s)" | python

更多阅读

关于Python2.7 执行作为命令解析 Unicode 字符串给出的语句不正确,但交互式提示做得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42335731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com