我有一些CSV文件需要从shift-jis转换为utf-8。
这是我在PHP中的代码,它成功转码为可读文本。
$str = utf8_decode($str);
$str = iconv('shift-jis', 'utf-8'. '//TRANSLIT', $str);
echo $str;
我的问题是如何在Python中做同样的事情。
答案 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" 它给出了正确的结果。
您可以尝试自己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无声地失败而放弃。