Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将UTF-8(文字)转换为Umlaute_Python 3.x_Utf 8 - Fatal编程技术网

Python 3.x 将UTF-8(文字)转换为Umlaute

Python 3.x 将UTF-8(文字)转换为Umlaute,python-3.x,utf-8,Python 3.x,Utf 8,我用刮板从Facebook上获取评论。不幸的是,它将德语中的Umlaute“Ä”“Ü”“Ö”转换为UTF-8文本,如“\xc3\xb6”。我现在尝试了不同的方法来重新转换文件,但不幸的是,我所做的任何事情都没有成功 for file in glob.glob("Comments/*.csv"): rawfile=csv.reader(open(file,"rU", encoding = "ISO-8859-1")) new_tablename=file +"converted"

我用刮板从Facebook上获取评论。不幸的是,它将德语中的Umlaute“Ä”“Ü”“Ö”转换为UTF-8文本,如“\xc3\xb6”。我现在尝试了不同的方法来重新转换文件,但不幸的是,我所做的任何事情都没有成功

for file in glob.glob("Comments/*.csv"):
    rawfile=csv.reader(open(file,"rU", encoding = "ISO-8859-1"))
    new_tablename=file +"converted"
    new_table=csv.writer(open("%s.csv" % (new_tablename),"w"))
    for row in rawfile:
        for w in row:
            a=str(w)
            b=a.encode('latin-1').decode('utf-8')
            print(b)
        new_table.writerow(row)
另一种方法是创建包含所有文字和德语字符的词典,但这种方法也不起作用

import csv, glob, re
print("Start")
converter_table=csv.reader(open("LiteralConvert.csv","rU"))
converterdic={}
for line in converter_table:
    charToFind=line[2]
    charForReplace=line[1]
    print(charToFind+" will be replaced by "+charForReplace)
    converterdic[charToFind] = charForReplace


print(converterdic)

for file in glob.glob("Comments/*.csv"):
        rawfile=csv.reader(open(file,"rU", encoding = "ISO-8859-1"))
    print("opening: "+ file)
    new_tablename=file +"converted"
    new_table=csv.writer(open("%s.csv" % (new_tablename),"w"))
    print("created clean file: " + new_tablename)
    for row in rawfile:
        for w in row:
            #print(w)
            try:
                w.translate(converterdic)
            except KeyError:
                continue
        new_table.writerow(row)
但是,如果我这样做的话,第一个解决方案很好:

s="N\xc3\xb6 kein Schnee von gestern doch der beweis daf\xc3\xbcr das L\xc3\xbcgenpresse existiert."
b = s.encode('latin-1').decode('utf-8')

print(b)

但当我解析文件中的字符串时就不是了。

我已经阅读了所有的注释和其他答案,试图了解问题在哪里,以及您面临的问题的核心是什么。这是我经过深思熟虑后得出的结论:

编码/解码字符串的常见核心问题是对所看到内容的解释。在这方面,非常重要的是要理解:

如果您有Python(或文件)中的字符串/文本,您永远无法看到它的“原样”。

并且必须首先决定编码/解码方案

换句话说,您总是通过给定编码/解码的过滤器查看您所查看的内容,如果编码/解码方案发生更改,它会更改您所查看的内容,而不会更改您所查看的内容

让我们再说一遍,换言之,换言之: 要查看文件中的字符串或文本,必须使用某种工具进行可视化…并且…这种可视化工具使用某种有关编码的信息(隐式使用默认值,或通过敦促您指定应使用哪种编码来显式使用),因此没有编码/解码就没有视觉化。理解这一点会对你如何思考你所看到的以及你在看什么产生巨大影响。这就像电影中的3D眼镜:戴上它们不会改变屏幕上的内容,但会改变你的视觉方式

因此,如果您有一个UTF-8编码的字符串,带有非ASCII字符,并使用显示UTF-8字符的工具查看该字符串,您会看到德文Umlaute原样,但如果您使用用于显示二进制字符串的工具查看同一字符串,则ti将不会显示其中的非ASCII字符(它是二进制的,因此它逐字节可视化,并且在不了解所用代码的情况下不能显示非ASCII)或UTF-8解释(Umlaut是两个字节,但可视化工具逐字节显示)-它将以“\xc3\xb6”的形式显示非ASCII字符“,但是……在字符串/文件中,没有8个字节-只有两个字节“0xC3”和“0xB6”。这就是为什么会出现这样的情况,例如print()命令,以便向您显示字节的用法”\xc3\xb6”

希望你现在明白我在说什么了(这是一种经过长时间/几天/几个月的困惑后的启蒙体验),是吗

下面是一段摘录,您可以在以下内容中找到字母“ö”:


“U+00F6öc3 b6öö拉丁文小写字母O随以DIAERESIS”“”

我已经阅读了所有的评论和其他答案,试图了解问题所在,以及您面临的问题的核心。在对其进行了许多深入思考后,我得出了以下结论:

编码/解码字符串的常见核心问题是对所见内容的解释。在这种情况下,理解以下内容非常重要:

如果您有Python(或文件)中的字符串/文本,您永远无法看到它的“原样”。

并且必须首先决定编码/解码方案

换句话说,您总是通过给定编码/解码的过滤器查看您所查看的内容,如果编码/解码方案发生更改,它会更改您所查看的内容,而不会更改您所查看的内容

让我们再说一遍,换言之,换言之: 要查看文件中的字符串或文本,必须使用某种工具进行可视化…并且…这种可视化工具使用某种有关编码的信息(隐式使用默认值,或通过敦促您指定应使用哪种编码来显式使用),因此没有编码/解码就没有视觉化。理解这一点会对你如何思考你所看到的以及你在看什么产生巨大影响。这就像电影中的3D眼镜:戴上它们不会改变屏幕上的内容,但会改变你的视觉方式

因此,如果您有一个UTF-8编码的字符串,带有非ASCII字符,并使用显示UTF-8字符的工具查看该字符串,您会看到德文Umlaute原样,但如果您使用用于显示二进制字符串的工具查看同一字符串,则ti将不会显示其中的非ASCII字符(它是二进制的,因此它逐字节可视化,并且在不了解所用代码的情况下不能显示非ASCII)或UTF-8解释(Umlaut是两个字节,但可视化工具逐字节显示)-它将以“\xc3\xb6”的形式显示非ASCII字符“,但是……在字符串/文件中,没有8个字节-只有两个字节“0xC3”和“0xB6”。这就是为什么会出现这样的情况,例如print()命令,以便向您显示字节的用法”\xc3\xb6”

希望你现在明白我在说什么了(这是一种经过长时间/几天/几个月的困惑后的启蒙体验),是吗

下面是一段摘录,您可以在以下内容中找到字母“ö”:


“U+00F6öc3 b6ö;拉丁文小写字母O随分音符”“”

您实际上是在做
b'\xc3\xb6'。解码('ISO-8859-1')。编码('LATIN-1')。解码('utf8')

rawfile = csv.reader(open(file,"rU", encoding = "ISO-8859-1"))
...
a = str(w)
b = a.encode('latin-1').decode('utf-8')