首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 2导出csv,支持日语测试

Python 2导出csv,支持日语测试
EN

Stack Overflow用户
提问于 2015-02-10 17:42:30
回答 1查看 925关注 0票数 1
代码语言:javascript
复制
import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

    test_jp = u'\u30a2\u30af\u30bb\u30b5\u30ea\u30fc'
    print(test_jp)
    print(type(test_jp))
    print(repr(test_jp))
    print('-------------------')
    print(test_jp.encode('utf-8'))    
    print(test_jp.encode('cp932'))

    '''
    print(test_jp.decode('utf-8'))
    spamwriter.writerow(test_jp)

    Causeing ERROR
    UnicodeEncodeError: 'ascii' codec can't encode characters
    in position 0-5: ordinal not in range(128)
    '''

我已经尝试过spamwriter.writerow(test_jp.encode('utf-8'))。

但是输出结果是乱码->‘ã,­ã,’ã,»ã,µãƒªããƒ?‘。

我希望输出的csv内容是'アクセサリー‘。

我该怎么办?(spamwriter.writerow(test_jp)不工作)

EN

回答 1

Stack Overflow用户

发布于 2015-02-10 18:05:06

你需要将它包装在一个list中,然后test_jp.encode("utf-8")就可以工作了,writerow需要一个迭代器,所以它会迭代写入每个字节的字符串:

代码语言:javascript
复制
spamwriter.writerow([test_jp.encode("utf-8")])

你可以看到,当我们迭代它的时候,我们也得到了奇怪的输出:

代码语言:javascript
复制
In [6]: for ch in test_jp.encode("utf-8"):
              print ch
   ...:     

�
�

�
�

�
�

�
�

�
�

�
�


In [7]: print test_jp.encode("utf-8")
アクセサリー

经过测试并正常工作:

代码语言:javascript
复制
$ cat eggs.csv 
Spam |Lovely Spam| |Wonderful Spam|
アクセサリー
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28428429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档