gpt4 book ai didi

python unicode在用作字符串时而不是在打印时转换为原始文本字符

转载 作者:行者123 更新时间:2023-11-30 22:51:11 27 4
gpt4 key购买 nike

我想要一个从方法中获取的 unicode 字符串,我希望看起来像原始文本字符而不是 unicode。

a=u'\u2018\u0997\u09c7\u09ae\u09bf\u0982 \u09aa\u09cd\u09b2\u09be\u099f\u09ab\u09b0\u09cd\u09ae\u2019 \u09a4\u09c8\u09b0\u09bf \u0995\u09b0\u09ac\u09c7 \u09ab\u09c7\u09b8\u09ac\u09c1\u0995'

print a #‘গেমিং প্লাটফর্ম’ তৈরি করবে ফেসবুক

打印总是有效,但我的用例不同。它正在打印的东西,我希望它把它放在我的 RESTful API 上,或者至少我想将它用作原始字符的字符串,如果我离开,因为我的客户将在 html 上使用它,则不会我怀疑能够轻松使用它。

最终结果应如下所示:

{title: ‘গেমিং প্লাটফর্ম’ তৈরি করবে ফেসবুক }

但是 json 转储就像:

json.dumps({'a': u})
'{"a": "\\\\u0996\\\\u09be\\\\u09b2\\\\u09bf\\\\u09df\\\\u09be\\\\u099c\\\\u09c1\\\\u09b0\\\\u09c0\\\\u09a4\\\\u09c7 \\\\u09a6\\\\u09c1\\\\u0987 \\\\u0997\\\\u09cd\\\\u09b0\\\\u09c1\\\\u09aa\\\\u09c7\\\\u09b0 \\\\u09b8\\\\u0982\\\\u0998\\\\u09b0\\\\u09cd\\\\u09b7\\\\u09c7 \\\\u09a8\\\\u09be\\\\u09b0\\\\u09c0\\\\u09b8\\\\u09b9 \\\\u0986\\\\u09b9\\\\u09a4 \\\\u09e7\\\\u09e6"}'

所以,我可能需要类似的东西,

blog={}
blog['title']= str(a) # or something else

到目前为止我已经尝试过以下操作,但到目前为止还没有运气:

>>> str(a) 

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

>>> a.encode('utf-8')
'\xe2\x80\x98\xe0\xa6\x97\xe0\xa7\x87\xe0\xa6\xae\xe0\xa6\xbf\xe0\xa6\x82 \xe0\xa6\xaa\xe0\xa7\x8d\xe0\xa6\xb2\xe0\xa6\xbe\xe0\xa6\x9f\xe0\xa6\xab\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xae\xe2\x80\x99 \xe0\xa6\xa4\xe0\xa7\x88\xe0\xa6\xb0\xe0\xa6\xbf \xe0\xa6\x95\xe0\xa6\xb0\xe0\xa6\xac\xe0\xa7\x87 \xe0\xa6\xab\xe0\xa7\x87\xe0\xa6\xb8\xe0\xa6\xac\xe0\xa7\x81\xe0\xa6\x95'

>>> a.encode('utf8')
'\xe2\x80\x98\xe0\xa6\x97\xe0\xa7\x87\xe0\xa6\xae\xe0\xa6\xbf\xe0\xa6\x82 \xe0\xa6\xaa\xe0\xa7\x8d\xe0\xa6\xb2\xe0\xa6\xbe\xe0\xa6\x9f\xe0\xa6\xab\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xae\xe2\x80\x99 \xe0\xa6\xa4\xe0\xa7\x88\xe0\xa6\xb0\xe0\xa6\xbf \xe0\xa6\x95\xe0\xa6\xb0\xe0\xa6\xac\xe0\xa7\x87 \xe0\xa6\xab\xe0\xa7\x87\xe0\xa6\xb8\xe0\xa6\xac\xe0\xa7\x81\xe0\xa6\x95'

>>> a.__str__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

>>> a.decode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

最佳答案

您误解了repr Python 对象的。文字字符串中的这些转义实际上在内部转换为 Python 在您 print 时显示的“真实”字符。 (也就是说,在内部,它为每个转义符存储单个 Unicode 序数,而不是转义符本身)。你不需要对其进行编码,除非你需要特定编码中的原始字节(并且解码它是无意义的; unicode 对象在 Py2 中具有该方法,但使用它通常是错误的,因为 unicode 是根据定义未编码的字节)。

基本上,只需使用 unicode你已经得到的对象,它是你期望的文本,当你使用交互式解释器时,它可能不会以这种方式显示(它回显对象的 repr s,它显示转义符而不是实际字符,部分以确保如果您缺乏显示真实字符的字体或语言支持,它不会出错)。 Unicode 友好的库将按照您期望的方式使用它,长度通常是字符数(在 Py2 中,在具有非 BMP 序数的 16 位 wchar 系统上,这可能不是真的,但通常是真的)。​​

也就是说,对于任何非 ASCII 密集型工作,我建议切换到 Python 3; Python 2 对 Unicode 的支持不太一致,并且存在更多的差距和陷阱。许多第三方软件包,甚至一些内置软件包(咳嗽 csv 咳嗽)都不是unicode友好,所以你最终需要明确 encode使用它们,然后 decode他们的结果。

关于python unicode在用作字符串时而不是在打印时转换为原始文本字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39092924/

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