微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中读取ISO-8859-1文件时损坏的CJK数据

如何解决在python中读取ISO-8859-1文件时损坏的CJK数据

我正在解析ISO-8859-1且其中包含中文,日文,韩文字符的文件

import os
from os import listdir

cnt = 0
base_path = 'data/'
cwd = os.path.abspath(os.getcwd())
for f in os.listdir(base_path):
    path = cwd + '/' + base_path + f
    cnt = 0
    with open(path,'r',encoding='ISO-8859-1') as file:
        for line in file:
            print('line {}: {}'.format(cnt,line))
            cnt +=1 

代码可以运行,但是会打印出损坏的字符。其他stackoverflow问题建议我使用编码和解码。例如,对于韩文,我尝试 file.read().encode('latin1').decode('euc-kr'),但是什么也没做。我还尝试使用utf-8文件转换iconv,但是在转换后的文本文件中字符仍然损坏。

任何建议将不胜感激。

解决方法

对不起,没有。 ISO-8859-1不能包含任何中文,日文或韩文字符。代码页最初不支持它们。

您在代码中所做的是让Python假定文件采用ISO-8859-1编码,并返回 Unicode 字符(即字符串的构建方式)。如果您未在encoding中指定open()参数,则默认值为假设UTF-8编码在文件中使用 ,并且仍以Unicode返回 >,即未指定任何编码的逻辑字符。

现在的问题是文件中的那些CJK字符如何编码。如果您知道答案,则只需在open()中输入正确的编码参数即可,它立即起作用。假设您所说的是EUC-KR,代码应为:

with open(path,'r',encoding='euc-kr') as file:
    for line in file:
        print('line {}: {}'.format(cnt,line))
        cnt +=1 

如果您感到沮丧,请查看chardet。它应该可以帮助您检测文本的编码。示例:

import chardet
with open(path,'rb') as file:
    rawdata = file.read()
    guess = chardet.detect(rawdata) # e.g. {'encoding': 'EUC-KR','confidence': 0.99}
    text = guess.decode(guess['encoding'])
    cnt = 0
    for line in text.splitlines():
        print('line {}: {}'.format(cnt,line))
        cnt +=1 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?