Python中有类似iconv的函数吗?

2024-05-14 08:02:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我用PHP编写的代码,它成功地将代码转换为可读文本。

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

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


Tags: 文件csv代码文本echoshiftutf8事情
3条回答

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

根据documentation的说法,这也可能是由于shift-jis方言的不同,请尝试使用“shift-jisx0213”或“shift-jis-2004”。

如果使用另一种方言不起作用,则可以通过使用.decode('shift-jis','ignore').decode('shift-jis','replace')来让python以静默方式失败。

因为当pythons内置的编码不足时,PyPi上有一个iconv

pip install iconv

不幸的是,文档是不存在的。

还有iconv_codecs

pip install iconv_codecs

例如:

>>> import iconv_codecs
>>> iconv_codecs.register('ansi_x3.110-1983')
>>> "foo".encode('ansi_x3.110-1983')

我不懂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

相关问题 更多 >

    热门问题