在utf-7转换期间看到的问题

时间:2017-03-09 18:43:57

标签: python-2.7 unicode

Python:2.7

我需要在继续之前转换为utf-7,所以我在python 2.7解释器中使用了以下代码:

>>> mbox = u'한국의'
>>> mbox.encode('utf-7').replace(b"+", b"&").replace(b"/", b",")
'&1VytbcdY-'

当我在我的python脚本中使用相同的代码,如下所示,mbox的输出是b'&Ti1W,XaE'而不是b'&Ti1W,XaE-',即在作为脚本而不是作为脚本运行时,字符串末尾的“ - ”缺失解释

    mbox = "b'" +  mbox + "'"
    print mbox
    mbox = mbox.encode('utf-7').replace(b"+", b"&").replace(b"/", b",")
    print mbox    

请建议。

1 个答案:

答案 0 :(得分:1)

引自Wikipedia's description of UTF-7

  

其他字符必须以UTF-16编码(因此U + 10000和更高版本将编码为代理),big-endian(因此高阶位首先出现),然后在修改后的Base64中编码。这些修改后的Base64编码的UTF-16块的开头用+号表示。结束由未在修改的Base64集中的任何字符指示。如果修改后的Base64之后的字符是 - (ASCII连字符 - 减号),那么它将被解码器消耗,并且解码将继续使用下一个字符。否则,解码将以base64之后的字符重新开始。

任何编码字符块都必须以非Base64字符结尾。如果字符串包含这样的字符,则将使用它,否则-将添加到块的末尾。出于这个原因,您的第一个示例包含-。您的第二个示例不需要,因为'不属于Base64 character set

如果您的目的是创建一个创建有效UTF-7字符串的Python文字,只需按不同的顺序执行操作。

mbox = b"b'" + mbox.encode('utf-7').replace(b"+", b"&").replace(b"/", b",") + b"'"