Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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中的BeautifulSoup解析格鲁吉亚字符(编码问题)_Python_Encoding_Beautifulsoup - Fatal编程技术网

用Python中的BeautifulSoup解析格鲁吉亚字符(编码问题)

用Python中的BeautifulSoup解析格鲁吉亚字符(编码问题),python,encoding,beautifulsoup,Python,Encoding,Beautifulsoup,我在Python2.7中使用BeautifulSoup解析HTML文件中的HTML表格内容。脚本应该获取一些输入HTML文件(notepad++说它们是UTF-8 w/o BOM),找到文件中的第一个表,并以某种人类可读的形式将行和列打印到另一个.HTML或.txt文件中(一个输出文件对应一个输入文件) 行和列中的数据是一堆格鲁吉亚字母,我想编码有问题 BeautifulSoap说默认输出编码是UTF-8,但在我的例子中似乎不是这样。记事本++显示ANSI,字符显示不正确 我的代码如下: def

我在Python2.7中使用BeautifulSoup解析HTML文件中的HTML表格内容。脚本应该获取一些输入HTML文件(notepad++说它们是UTF-8 w/o BOM),找到文件中的第一个表,并以某种人类可读的形式将行和列打印到另一个.HTML或.txt文件中(一个输出文件对应一个输入文件)

行和列中的数据是一堆格鲁吉亚字母,我想编码有问题

BeautifulSoap说默认输出编码是UTF-8,但在我的例子中似乎不是这样。记事本++显示ANSI,字符显示不正确

我的代码如下:

def get_flexion(number_of_files):

    # interates through all input files
    for i in range(1, number_of_files):
        input = open('html/' + str(i) + '.html')

        # parsing html
        soup = BeautifulSoup(input, from_encoding='utf-8')
        table = soup.find('table')
        print table
        if (table == None):
            continue
        else:
            rows = table.find_all('tr')

            # creating output file
            output = open('output/' + str(i) + '.html', 'wb')

            # getting table data
            for tr in rows:
                columns = tr.find_all('td')
                for td in columns:
                    text = td.find(text=True)
                    if text != None:
                        output.writelines(text)
                output.writelines('\n')

如您所见,我在解析的末尾添加了一个参数,它应该强制UTF-8。我尝试了从文档中获取示例的各种其他方法,但我的输出文件似乎仍然是ANSI。有什么问题吗?

在Python2.x下,内置的
open
函数将使用操作系统的默认字符编码打开一个文件。对于Windows,这是例如在大多数西方系统上的Windows-1252,它在多个程序中都得到了支持

由于
打开的默认设置
,因此,每当您写入文件时,都会使用该代码页对内容进行编码。根据您的描述,系统上的代码页不支持格鲁吉亚字符(即使找到的字符都可以映射,这是幸运的巧合),这不是您想要的:您希望使用支持格鲁吉亚字符的编码对其进行编码,如
utf-8
。要做到这一点,你可以使用

import codecs
outputfile = codecs.open(path, mode, encoding='utf-8')
并像往常一样继续写入
输出文件

请注意,这仅与Python2.x相关。从Python3.3开始,默认的源代码编码变成了utf-8。这是我们讨论的话题。Python3.3的内置
open
有一个
encoding
参数,您可以直接指定它(“显式优于隐式”)