【问题标题】:python - Converting a non-ascii character to a specific characterpython - 将非ASCII字符转换为特定字符
【发布时间】:2014-06-24 16:40:56
【问题描述】:

大家好,感谢您的宝贵时间!

我有 iso-8859-1 html 文件作为输入,用 html 实体代替非 ascii 字符,这很整洁。除了只有一个字符:–(00C9 unicode 代码点,以防它不显示)。我想将其转换为“oe”以摆脱它。

我已经试过了 iconv -f iso-8859-1 -t ascii//translit

但它撕掉了有问题的角色,并没有在其位置放置任何东西。

我使用 python 2.7 并尝试了一些关于解码、编码、编解码器的方法,但我哪儿也不去。 这是我此时的代码:

i=0
for file in os.listdir(dir_in):
i+=1
file=codecs.open(dir_in+file,"r","iso-8859-1")
out=codecs.open(dir_out+str(i)+".html","w","utf-8")
    for line in file:
            #at this point the type of line is "unicode"
    line=line.decode("iso-8859-1",errors="replace")
            out.write(line)
file.close
out.close

(我无法正确显示缩进,但我向你保证这部分没问题) 我收到“ascii 编解码器无法编码字符 u\x9c”错误。我不确定我是否正确使用了解码。

我也试过了:

line=unicode(line)

在没有替换的情况下摆脱了角色(我猜这就是它应该做的)

line=unicode(line, errors="replace")

这给了我“TypeError:不支持解码 Unicode” 我想这两个没有用,因为我不应该给“unicode”一个已经是 unicode 的东西。

如果你有一个在 bash 或 perl 中执行此操作的简单方法,我也很感兴趣,但我不能使用 python 3,因为它不受必须运行该东西的服务器支持。

非常感谢!

【问题讨论】:

    标签: python decode iso-8859-1 non-ascii-characters


    【解决方案1】:

    你能在尝试写之前先replace有问题的角色吗?:

    line = line.replace(u"\x9c", "oe")
    

    【讨论】:

    • 好吧,我只是说我没有足够的睡眠,因为我很确定我首先尝试了这个。无论如何,这工作得很好!非常感谢!
    • @PetitLama 太棒了!如果您愿意,可以accept my answer 将问题标记为已解决。
    • 好的,谢谢,就在我想知道如何将问题标记为已解决时。这就是我所说的有用的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多