有一种方法可以在 python 中将字符串转换为 unicode 字符串?

Posted

技术标签:

【中文标题】有一种方法可以在 python 中将字符串转换为 unicode 字符串?【英文标题】:There is a way to transform string to unicode string in python? 【发布时间】:2021-12-30 22:30:35 【问题描述】:

在 python 中,我需要转换某些字符需要转换为 unicode sintax 的特定字符串。例如:

“Città”->“Citt\u00E0”

我需要第二种形式的字符串才能将其打印到文件上。

我尝试了一些功能,但我现在遇到的问题是字符串必须按以下方式进行转换

"Citt\xe0"->"Citt\u00E0"

有没有办法执行这种转换和反向操作?

【问题讨论】:

这不是一个有意义的问题。 "Città""Citt\u00E0" 是一回事。如果你想要一个实际上包含反斜杠和小写 u 等的字符串,那么就是"Citt\\u00E0" 这两个字符串不同。我想要的是字符'à'必须在字符串'\u00E0'中转换。 源字符串的编码是什么? UTF8? 不,它们没有什么不同。如果您在解释器提示符下键入'\u00E0',它将向您报告'à'。因为它们是一样的。 看起来像X-Y Problem。您这样做是为了生成 JSON 响应吗?如果是这样,请使用 json 模块。 【参考方案1】:

我可以理解您想在文件中按字面意思打印 \u00EO。 这是一个示例程序,它查看字符序号是否 >127,如果是,则将其转换为您想要的格式。 在本例中,sample.txt 将输出为。希望这个问题 西塔阿 西特\u00E0\u00E1

with   open("sample.txt","w") as fd:
    my_var='Citt\xe0\xe1'
    final_str = [my_var[idx] if ord(my_var[idx]) <= 127 else "\\u00"+str(hex(ord(my_var[idx]))).replace("0x","").capitalize()  for idx in range(len(my_var))]
    val="".join(final_str)
    fd.write(my_var+"\n")
    fd.write(val)

【讨论】:

【参考方案2】:

以下(部分注释)脚本可能会有所帮助:

import re

x = "\\x66 ? € Città di …";
#    ↑↑↑↑↑ │  │     │  └─ ASCII               Unicode Range U+0000..U+007F   
#          │  │     └──── Latin-1 above ASCII               U+0080..U+00FF
#          │  └────────── BMP     above Latin-1             U+0100..U+FFFF
#          └───────────── Unicode above BMP                 U+10000..U+10FFFD
y = x.encode('unicode_escape').decode();
#           ↓↓↓↓↓↓↓↓↓                         negative lookbehind assertion
z = re.sub('(?<!\\\\)\\\\x(?=[0-9A-Za-z]2)', '\\\\u00', y);
#                         ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  positive lookahead assertion
a = ( z.encode('raw_unicode_escape').
        decode('unicode_escape').
        encode('utf-16_BE','surrogatepass').
        decode('utf-16_BE')
    );                                       ### reverse back to original string
print( x + "\n" + y + "\n" + z + "\n" + a ); ### make public every stage

输出Python 3.8.6 on Windows 10 64 位):.\SO\70046868.py

\x66 ? € Città di …
\\x66 \U0001f60a \u20ac Citt\xe0 di \u2026
\\x66 \U0001f60a \u20ac Citt\u00e0 di \u2026
\x66 ? € Città di …

资源

codecs — Codec registry and base classes re — Regular expression operations

【讨论】:

以上是关于有一种方法可以在 python 中将字符串转换为 unicode 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将 bool 转换为文本

在 Python 中将转义字符转换为 utf

如何在 Python 中将字符串转换为字节数组

在python中将字符串/字符转换为整数

在python中将字符串转换为十六进制

在Python中将IP地址字符串转换为二进制