2016-08-30 33 views
0

我想一个十六进制字符串转换成日语(编解码器:SHIFT-JIS)和写日本输出使用Python 2.7的文件。但是,我得到的只是文件中的原始十六进制字符串。有人能告诉我我做错了吗?下面是我的代码使用方法:如何将十六进制字符串转换为日文并将其写入Python 2.7中的文件?

fd = open(path,'w') 
temp_str ='\x8d\xc5\x82\xe0\x8d\x82\x8b\x4d\x82\xc8\x89\xa4\x82\xc5\x82\xa0\x82\xc1\x82\xbd\x82\xbc\x81\x76\x80\x01\xff\xff' 
fd.write(temp_str.encode('shift-jis')) 
fd.close() 

所有我的文件中已经得到的是“\ x8d \ XC5 \ X82 \ xe0 \ x8d \ X82 \ x8b \ x4d \ X82 \ xc8 \ X89 \ XA4 \ X82 \ XC5 \ X82 \ XA0 \ X82 \ XC 1 \ X82 \ XBD \ X82 \命苦\ X81 \ X76 \ X80 \ X01 \ XFF \ XFF”。

回答

1

字符串似乎UTF-16BE进行编码:

>>> print temp_str.decode('utf_16_be') 
跅苠趂譍苈覤苅芠苁芽芼腶老 

但同时很畸形的,即它被切断一半。

uni_str = temp_str.decode('utf_16_be') 

然后保存Unicode字符串到您想要用的编码文件:你应该首先通过解码字节的字符串转换为Unicode

fd = open(path,'w') 
fd.write(uni_str.encode('shift-jis')) 
fd.close() 

然而,编解码器“倒班冥冥似乎并不喜欢你的字符串:

>>> print uni_str.encode('shift_jis') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'shift_jis' codec can't encode character u'\u8dc5' in position 0: illegal multibyte sequence 

这是不是日本人,而是中国:

>>> print uni_str.encode('gb18030') 
ڗ���f�G���B�i�[��ѿ�d�a�τ1�9 

'GB18030' 是中国人的编解码器,according to Python docs

是,其jiggebirsh因为我没有与该编解码器的终端,但它是从Python中只编解码器编码字符串,不除UTF8/16/32的错误。

1

也许你应该打开“WB”,而不是“W”模式的文件吗?

相关问题