2012-02-08 91 views
0

我正在处理使用绝对路径引用另一个文件的二进制文件。 该路径包含日语和ascii字符。在python 3.x中使用带有混合编码的字符串

字符串的长度设定,这样我就可以读很多字节,并将其转换成字符串。

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

一个字节被用于每个ASCII字符,而两个字节被用于每个日语字符。

什么是将这些字节转换为字符串的最快和最干净的方式?编码是已知的。相同的技术是否可以在老版本的python中工作?

+1

请勿混用编码;使用utf-8做一切事情。 – geoffspear 2012-02-08 04:05:20

+1

如果我正在阅读的源不使用utf-8处理所有内容,那么这将不起作用。我使用的许多其他文件都有不使用utf-8的开发人员(无论是中文,日文还是韩文)。 – MxyL 2012-02-08 04:15:41

+0

是否使用mybytestring.decode('shift-jis')不起作用?即使它不是一个真正的标准,shift-jis在理论上与ascii兼容,除了可能是\和〜字符。 – gps 2012-02-08 08:15:09

回答

3

这听起来像是你误会了Unicode和编码的基础知识的受害者。这可能是你没有,但误解是普遍和可以理解的,而你描述的情况并非如此。

字节的字符串包含混合编码保,每个定义,在任何这些编码的无效。如果真的如此,你将不得不将字节串分成它的部分,并且分开解码每个部分。在这种情况下,它可能意味着在路径分隔符上进行分割,所以它会相当容易,但在其他情况下则不会。不过,我很怀疑这是事实,因为这意味着你的来源是疯狂的。发生这种情况,但不太可能。 :-)

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

如果不是,请说明你的来源是什么,并给您提供的字节串(在ASCII/HEX)的例子。