Python:如何使用字符值和代码点

时间:2016-12-03 15:59:01

标签: python encoding utf-8

我读过一堆关于ord和chr的内容,但到目前为止,我被困住了。 我需要的是能够做到以下几点:

我有一个代码点的字节数组,因此在0-255范围内 对于他们每个人,我想要相关的utf-8字符 然后我需要连接这些字符并使用结果字符串作为字节数组,而不是它们的代码点数组!

我试图将字符串视为在iso-8859-1中编码的bytearray,但到目前为止,没有运气。 任何帮助表示赞赏!

当前代码:

import sys
reload(sys)
msg = ''
sys.setdefaultencoding('iso-8859-1')
for m in bytearray(input, 'iso-8859-1', ''):
    msg += unichr(m)
msg = bytearray(msg, 'iso-8859-1')

2 个答案:

答案 0 :(得分:0)

无需摆弄“defautlencoding” - 只需将其保留原样 - 您拥有自己的数据和所需的编码.Python解释器具有默认值 - 与OS终端的接口,依此类推。 / p>

所以,假设你有一个名为input的字节数组,在iso-8859-1(latin1)中编码,你需要相应的utf-8编码文本,jsut do:

result = bytearray(bytes(input).decode("iso-8859-1").encode("utf-8"))

“encode”方法的输出本身就是一个“字节”对象 - 字节和字节对象可以透明地构建在另一个对象上。

(是的,您只需要该行 - 无需导入sys,使用for循环或其他编码调用。)

答案 1 :(得分:-1)

对于那些想知道的人,我在更多的挖掘后自己找到了解决方案,但如果你知道一个,我会采用更加蟒蛇化的方式做事!

import sys
reload(sys)
sys.setdefaultencoding('iso-8859-1')
mm = bytearray(input)
msg = bytearray()
for m in mm:
    val = bytearray(unichr(m), 'utf-8')
    for v in val:
        msg.append(v)
# revert if required
# sys.setdefaultencoding('ascii')