python - 在python中将字符串转换为unicode类型

标签 python unicode encoding utf-8

我正在尝试这段代码:

s = "سلام"
'{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))

但是出现这个错误:

'{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd3 in position 0: ordinal not in range(128)

我试过了 '{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))但没有任何改变。

我该怎么办?

最佳答案

由于您使用的是 python 2,s = "سلام" 是一个字节字符串(无论您的终端使用何种编码,大概是 utf8):

>>> s = "سلام"
>>> s
'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'

您不能编码 字节字符串(因为它们已经被“编码”)。您正在寻找 unicode(“真实”)字符串,在 python2 中必须以 u 为前缀:

>>> s = u"سلام"
>>> s
u'\u0633\u0644\u0627\u0645'
>>> '{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))
'1101100010110011110110011000010011011000101001111101100110000101'

如果您从 raw_input 等函数中获取字节字符串,那么您的字符串已经编码 - 只需跳过 encode 部分:

'{:b}'.format(int(s.encode('hex'), 16))

或者(如果你打算用它做任何其他事情)将它转换为 unicode:

s = s.decode('utf8')

这假设您的输入是 UTF-8 编码的,如果不是这种情况,请先检查 sys.stdin.encoding

i10n 的东西很复杂,这里有两篇文章可以进一步帮助您:

关于python - 在python中将字符串转换为unicode类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19258729/

相关文章:

python - 将包含混合字体的Word文档转换为Unicode

c# - Ftp 使用 utf-8 字符创建一个文件名,例如希腊语、德语等

c - 给定一个 C 语言的字符串,我如何知道它是用 ASCII 还是 Unicode 编码的?

python - 对重新编译行为感到困惑

python - aws sagemaker训练管道模式读取随机字节数

python - gensim.corpora.Dictionary 是否保存了词频?

unicode - 6 个八位字节的 UTF-8 序列是否有效?

python - 无法使用 Python 请求库抓取网页

Python:如何将 Shutil.copy() 与 unicode 文件名一起使用

Android:如何让这个 "समोसा"在我的应用程序中显示为印地语字符?