2016-12-03 77 views
0

我读过一堆关于ord和chr的文章,但到目前为止我被卡住了。 我需要的是能够做到以下几点:Python:如何使用字符值和代码点

我的代码点的字节数组从而范围在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') 
+0

解码为“iso-8859-1”并编码为“utf-8”有什么问题? –

+0

其实我的'输入'是一个字节数组。我也想要一个bytearray。你能告诉我一些示例代码吗?我无法准确理解你的意思,抱歉 – Ottunger

回答

-1

对于那些想知道的人,我经过更多挖掘后自己找到了解决方案,但是如果您知道其中一个,我会采取更多以python为导向的方式!

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') 
+0

正如我写的 - 我是uselees和倾向于让你奇怪的错误,试图改变默认编码。另外,不需要将字符串转换为字节数组并运行“for”表达式来对字符进行编码/解码。 – jsbueno

0

无需拨弄“defautlencoding” - 刚刚离开它,因为它是 - 你有你的数据和编码您want.The Python解释器都有它的默认值 - 即与OS终端的接口,等等。

因此,假设你有一个名为input与ISO-8859-1(latin1的)encodning字节组,您要对应的UTF-8编码的文本,仅仅指刚做:

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

的输出“编码”方法本身就是一个“字节”对象 - 字节和字节数组对象可以彼此透明地构建。

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

+0

我的目标实际上并不是将字节编码为utf-8,而是将输入中的字节视为编码utf-8值的代码。 实际上,在PHP中,可以是: '公共静态函数isoUTF($ STR){ \t \t \t $ RET = ''; \t \t \t $ l = strlen($ str); \t \t \t为($ I = 0; $ I <$升; $ I ++){ \t \t \t \t $代码= mb_convert_encoding( '&#' ORD($ STR [$ I])。。 ';', 'utf-8','HTML-ENTITIES'); \t \t \t \t为($ J = 0; $Ĵ Ottunger

+0

如果您认为字符串为utf-8,那么jst会解码它们传递“utf-8”作为编解码器名称。 但是在恢复编码之前,也许你会更好地阅读本文 - 请为自己做这件事:http://www.joelonsoftware.com/articles/Unicode.html – jsbueno