在Python 3中,如何将ascii转换为字符串,*而不进行编码/解码*

时间:2017-04-23 09:25:28

标签: python-3.x

Python 3.6

我将字符串从utf8转换为:

B' \ XE6 \ X88 \ X91 \ XE6 \ XB2 \ XA1 \ XE6 \ x9c \ X89 \ XE7 \ X94 \ xb5@xn--ssdcsrs-2e1xt16k.com.au'

我现在想把那个ascii块重新换成字符串形式,所以开头不再有小b用于字节。

但我不希望它转换回UTF8,我想要在Python字符串中使用与上面相同的字符序列。

我该怎么办?我能找到的就是将字节转换为字符串以及编码或解码的方法。

2 个答案:

答案 0 :(得分:1)

(错误的)答案非常简单:

  

<强> CHR(asciiCode)

在您的特殊情况下:

myString = ""
for char in b'\xe6\x88\x91\xe6\xb2\xa1\xe6\x9c\x89\xe7\x94\xb5@xn--ssdcsrs-2e1xt16k.com.au':
    myString+=chr(char)
print(myString)

给出:

æ没æçµ@xn--ssdcsrs-2e1xt16k.com.au

也许你也对正确的答案感兴趣?它可能不会让你高兴,因为它说你总是要处理编码/解码...因为myString现在是同时包括UTF-8和ASCII(与您之前的情况完全相同;#34;转换为#34;它转换为ASCII)。

请注意,myString在打印时的显示方式取决于print使用的隐式编码/解码。

换句话说......

  

没有办法避免编码/解码

但是有一种方法可以采用一种不明确的方式。

我想在这里阅读我的答案:Converting UTF-8 (in literal) to Umlaute将帮助您理解整个编码/解码事件。

答案 1 :(得分:0)

你所拥有的不是ASCII,因为它包含例如字节\xe6,它高于127.它仍然是UTF8。

字符串的表示(开头是'b',然后是',然后是'\',...),那个是ASCII。你可以通过repr(yourstring)获得它。但是您打印的字符串的内容是UTF8。

但我认为您不需要将其转换回UTF8字符串,但这可能取决于您的其余代码。