在python 3.x中使用具有混合编码的字符串

时间:2012-02-08 03:36:37

标签: unicode python-3.x string-parsing

我正在使用二进制文件,该文件使用绝对路径引用另一个文件。 该路径包含japanese和ascii字符。

给出了字符串的长度,所以我可以读取那么多字节并将其转换为字符串。

然而问题是尝试转换字符串。如果我将编码指定为ascii,它将在日文字符上失败。如果我将其指定为日语编码(shift-jis或其他),它将无法正确读取英文字符。

每个ascii字符使用一个字节,而每个日语字符使用两个字节。

将这些字节转换为字符串的最快,最干净的方法是什么?编码是众所周知的。相同的技术是否适用于旧版本的python。

1 个答案:

答案 0 :(得分:3)

这听起来像是因为误解了Unicode和编码的基础知识而成为受害者。可能你没有,但误解是常见的和可理解的,而你描述的情况则不然。

根据定义,包含混合编码的字符串在任何这些编码中都是无效的。如果确实如此,则必须将字节字符串拆分为其部分,并分别解码每个部分。在这种情况下,它可能意味着拆分路径分隔符,因此它将相当容易,但在其他情况下它不会。但是,我严重怀疑是这种情况,因为这意味着你的消息来源是疯了。发生这种情况,但不太可能。 : - )

如果源为一个路径作为字节字符串,则该字符串很可能只使用一个编码。 它可能包含日语和ASCII字符,但仍然使用一种编码。最常用的处理日语和ASCII的编码是UTF-8和UTF-16。我的猜测是你的来源使用其中一个。事实上,既然你写了“每个ascii字符使用一个字节,而每个日语字符使用两个字节”,它可能是UTF-8。它也可以是Shift JIS,但似乎你已经尝试过了。

如果没有,请解释你的来源是什么,并给出你给出的字节串(ASCII / HEX)的例子。