Python中有像iconv这样的函数吗?

时间:2015-06-05 08:44:57

标签: python encoding

我有一些CSV文件需要从shift-jis转换为utf-8。

这是我在PHP中的代码,它成功转码为可读文本。

$str = utf8_decode($str);
$str = iconv('shift-jis', 'utf-8'. '//TRANSLIT', $str);
echo $str;

我的问题是如何在Python中做同样的事情。

3 个答案:

答案 0 :(得分:4)

我不了解PHP,但这样做有用:

mystring.decode('shift-jis').encode('utf-8') ?

此外,我假设CSV内容来自文件。在python中打开文件有几个选项。

with open(myfile, 'rb') as fin

将是第一个,你会得到数据

with open(myfile, 'r') as fin

将是默认文件打开

此外,我尝试使用shift-js文本计算我的计算机并使用以下代码:

with open("shift.txt" , "rb") as  fin :
    text = fin.read()

text.decode('shift-jis').encode('utf-8')

结果是UTF-8中的以下内容(没有任何错误)

' \xe3\x81\xa6 \xe3\x81\xa7 \xe3\x81\xa8'

好的,我验证了我的解决方案:)

第一个字符确实是好字符:" \ xe3 \ x81 \ xa6"意思是" E3 81 A6" 它给出了正确的结果。

enter image description here

您可以尝试自己URL

答案 1 :(得分:1)

当pythons内置编码不足时,PyPi上有constexpr

constexpr

遗憾的是,文档是不存在的。

还有iconv

pip install iconv

例如:

iconv_codecs

答案 2 :(得分:0)

如果您可以发布您尝试转换的字符串会很有帮助,因为此错误表明数据中存在一些问题,旧版本的PHP在损坏的输入字符串上无声地失败,这使得这很难诊断。

根据documentation,这可能也是由于shift-jis方言的差异,请尝试使用'shift_jisx0213'或'shift_jis_2004'。

如果使用其他方言不起作用,您可能会因使用.decode('shift-jis','ignore').decode('shift-jis','replace')要求python无声地失败而放弃。