Python UTF-16 unicode转换
Python UTF-16 unicode conversion
我正在使用以下代码将阿拉伯语转换为 Unicode UTF-16。
例如我有一个阿拉伯语文本为 مرحبا
unicode = ''.join([hex(ord(i)) for i in t.text])
此代码提供 Unicode 字符串作为 0x6450x6310x62d0x6280x627
我需要的Unicode格式是\u0645\u0631\u062d\u0628\u0627
我想复制这个website
使用上面的方法我使用replace
方法将0x格式转换为\u0格式但是0x格式没有按预期转换特殊字符所以我必须使用替换方法。
unicode = str(unicode).replace('0x', '\u0')
unicode = str(unicode).replace('\u020', ' ') #For Space
unicode = str(unicode).replace('\u02e', '\u002e') #For .
unicode = str(unicode).replace('\u022', '\u0022') #For "
unicode = str(unicode).replace('\u07d', '\u007d') #For }
unicode = str(unicode).replace('\u030', '\u0030') #For 0
unicode = str(unicode).replace('\u07b', '\u007b') #For {
unicode = str(unicode).replace('\u031', '\u0031') #For 1
使用默认的 python 编码,UTF-16 不提供 \u0 格式的编码。
print("مرحبا".encode('utf-16'))
b"\xff\xfeE\x061\x06-\x06(\x06'\x06"
如何获得 \u0 格式的结果,因为此 website 以 UTF-16 格式提供。
谢谢。
这个问题就是关于你如何表示十六进制值的问题。要以您想要的表示形式获取字符串,您可以使用
In [84]: text = "مرحبا"
In [85]: print(''.join([f'\u{ord(c):0>4x}' for c in text]))
\u0645\u0631\u062d\u0628\u0627
简短说明
考虑 text
的第一个字符:
In [86]: ord(text[0])
Out[86]: 1605
它的整数(十进制)值为 1605。十六进制为 645:
In [87]: hex(ord(text[0]))
Out[87]: '0x645'
您还可以使用字符串格式(例如 Python 3.6+ 中的 f-strings)将其显示为 \u0645:
In [88]: f'\u{ord(text[0]):0>4x}'
Out[88]: '\u0645'
格式字符串中的x
表示“十六进制”。 0>4
表示将其打印为 4 位数字,并用零填充。
我正在使用以下代码将阿拉伯语转换为 Unicode UTF-16。
例如我有一个阿拉伯语文本为 مرحبا
unicode = ''.join([hex(ord(i)) for i in t.text])
此代码提供 Unicode 字符串作为 0x6450x6310x62d0x6280x627
我需要的Unicode格式是\u0645\u0631\u062d\u0628\u0627
我想复制这个website
使用上面的方法我使用replace
方法将0x格式转换为\u0格式但是0x格式没有按预期转换特殊字符所以我必须使用替换方法。
unicode = str(unicode).replace('0x', '\u0')
unicode = str(unicode).replace('\u020', ' ') #For Space
unicode = str(unicode).replace('\u02e', '\u002e') #For .
unicode = str(unicode).replace('\u022', '\u0022') #For "
unicode = str(unicode).replace('\u07d', '\u007d') #For }
unicode = str(unicode).replace('\u030', '\u0030') #For 0
unicode = str(unicode).replace('\u07b', '\u007b') #For {
unicode = str(unicode).replace('\u031', '\u0031') #For 1
使用默认的 python 编码,UTF-16 不提供 \u0 格式的编码。
print("مرحبا".encode('utf-16'))
b"\xff\xfeE\x061\x06-\x06(\x06'\x06"
如何获得 \u0 格式的结果,因为此 website 以 UTF-16 格式提供。
谢谢。
这个问题就是关于你如何表示十六进制值的问题。要以您想要的表示形式获取字符串,您可以使用
In [84]: text = "مرحبا"
In [85]: print(''.join([f'\u{ord(c):0>4x}' for c in text]))
\u0645\u0631\u062d\u0628\u0627
简短说明
考虑 text
的第一个字符:
In [86]: ord(text[0])
Out[86]: 1605
它的整数(十进制)值为 1605。十六进制为 645:
In [87]: hex(ord(text[0]))
Out[87]: '0x645'
您还可以使用字符串格式(例如 Python 3.6+ 中的 f-strings)将其显示为 \u0645:
In [88]: f'\u{ord(text[0]):0>4x}'
Out[88]: '\u0645'
格式字符串中的x
表示“十六进制”。 0>4
表示将其打印为 4 位数字,并用零填充。