gpt4 book ai didi

Python:Mac 和 Ubuntu 之间的 Unicode 编码不同

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:33 26 4
gpt4 key购买 nike

当我使用 tornado 3.2.2 开发 WAS 服务器时,

将系统从 Mac 更改为 Ubuntu 后,我遇到了一些 unicode 问题。

在Mac环境下,运行良好。

但是,同一个DB(远程MySQL服务器),同一个源代码,显示不同

ubuntu下的结果。

两者唯一不同的是运行机器(mac和ubuntu 14.04)

和python版本(mac: 2.7.8, ubuntu: 2.7.6)

Mac 下,它显示正确的结果如下所示

"备注": "30\uc77c\uc774\uc6a9\uad8c"

但是在ubuntu下,是这样的

"remark": "30????"

2 天来,我一直在尝试执行我在网络上找到的所有内容。

但我找不到原因。

我已经尝试了我能做的每一种编码/解码方式,如下所示:

print(type(test_dict["remark"]))
print(test_dict["remark"].encode("utf-8").decode("euc-kr"))
print(test_dict["remark"].decode("utf-8").encode("euc-kr"))
print(test_dict["remark"].encode("euc-kr").decode("utf-8"))
print(test_dict["remark"].decode("euc-kr").encode("utf-8"))
print(unicode(test_dict["remark"], 'utf-8'))
encoding = chardet.detect(test_dict["remark"])
print(encoding)
print(test_dict["remark"].decode("unicode-escape"))
print(unicode(test_dict["remark"], "utf-8"))
print(unicode(test_dict["remark"], "utf-8").decode("utf-8").encode("utf-8"))
print(unicode(test_dict["remark"], "utf-8").encode("utf-8").decode("utf-8"))
for c in test_dict["remark"]:
if c not in string.ascii_letters:
print(" not ascii")
else:
print("ascii")
print(test_dict["remark"].decode(encoding["encoding"]).encode("utf-8"))
print(test_dict["remark"].encode("utf-8"))
print(test_dict["remark"].decode("utf-8").encode("euc-kr"))
print(unicode(test_dict["remark"].decode("utf-8").encode("utf-8")))

还有 tornado.escape 方法。

但结果还是不对。

Ubuntu 下的结果如下:

<type 'str'>
30? ???
30? ???
30? ???
30? ???
30? ???
{'confidence': 1.0, 'encoding': 'ascii'}
30? ???
30? ???
30? ???
30? ???
not ascii
not ascii
not ascii
not ascii
not ascii
not ascii
not ascii
30? ???
30? ???
30? ???
30? ???

不允许将区域设置更改为 euc-kr

我的语言环境设置如下

苹果机

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

Ubuntu

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

我在测试的时候发现了一些奇怪的东西......

在代码下,两个系统看起来不一样

encoding = chardet.detect(test_dict["remark"])

Mac

{'confidence': 0.938125, 'encoding': 'utf-8'}

Ubuntu

{'confidence': 1.0, 'encoding': 'ascii'}

有人知道为什么会这样吗?

任何想法或建议都将非常感谢我。

提前致谢

最佳答案

如果您希望获得此 Unicode 韩文输出:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
>>> print u"30\uc77c \uc774\uc6a9\uad8c"
30일 이용권

那么我唯一能想到的导致错误输出的是你的终端没有使用 UTF-8。

但话又说回来,如果 OS X 给你 "30\uc77c\uc774\uc6a9\uad8c"它似乎并没有做得更好(除非你能够从基本的多语言平面读取两个八位位组代码点(这将是非常令人印象深刻的))。

关于Python:Mac 和 Ubuntu 之间的 Unicode 编码不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794228/

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