首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python UTF-16 unicode转换

Python UTF-16 unicode转换
EN

Stack Overflow用户
提问于 2020-11-12 19:21:34
回答 1查看 79关注 0票数 0

我使用下面的代码将阿拉伯语转换为Unicode UTF-16。

例如,我有一个阿拉伯文本作为مرحبا

代码语言:javascript
复制
unicode = ''.join([hex(ord(i)) for i in t.text])

此代码将Unicode字符串提供为0x6450x6310x62d0x6280x627

我需要Unicode的格式是\u0645\u0631\u062d\u0628\u0627

我想复制此website

使用上面的方法,我使用replace方法将0x格式转换为\u0格式,但0x格式不能像预期的那样转换特殊字符,所以我必须使用replace方法。

代码语言:javascript
复制
    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格式的编码。

代码语言:javascript
复制
print("مرحبا".encode('utf-16'))
b"\xff\xfeE\x061\x06-\x06(\x06'\x06" 

如何获取\u0格式的结果,因为此website是以UTF-16格式提供的。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-12 21:16:20

这个问题是关于如何表示十六进制值的。要获取所需表示形式的字符串,可以使用

代码语言:javascript
复制
In [84]: text = "مرحبا"

In [85]: print(''.join([f'\\u{ord(c):0>4x}' for c in text]))
\u0645\u0631\u062d\u0628\u0627

简短的解释

考虑text的第一个字符

代码语言:javascript
复制
In [86]: ord(text[0])
Out[86]: 1605

它具有整数(十进制)值1605。这是十六进制的645:

代码语言:javascript
复制
In [87]: hex(ord(text[0]))
Out[87]: '0x645'

您还可以使用字符串格式(例如Python 3.6+中的f-strings )将其显示为\u0645:

代码语言:javascript
复制
In [88]: f'\\u{ord(text[0]):0>4x}'
Out[88]: '\\u0645'

格式字符串中的x表示“十六进制”。0>4意味着将其打印为4位数字,并用零填充它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64802955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档