Unicode、ASCII 和 Regex 不起作用

斯托尔泰克

所以我正在使用 Python 3.6.something 并且我一直试图弄清楚这个完全直观的 Unicode/ASCII 噩梦。我正在尝试将网页中的文本保存到文件中,然后稍后使用 Regex 对其进行解析。

当我尝试读取文件并解析它时,我需要找到模式:

Note 1 –

这显然不同于:

Note 1 -

我不断收到错误:

SyntaxError: Non-UTF-8 code starting with '\x96' in file C:\Users\Steve\eclipse-workspace\scraper\BeautifulSoupTest.py on line 28, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

在我试图做的正则表达式上。这真的很奇怪,因为 '\x96' 是我在网上看到的 Unicode 字符。Unicode 或 ASCII 发生了一些事情,我不知道它是什么。我也无法使用 replace() 删除 '\x96' 字符,它给出了相同的错误。任何人都可以帮忙吗?

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re

def downloadCleanText(url, year):
    urlObject = urlopen(url)

    rawHTML = urlObject.read()


    cleanedText = BeautifulSoup(rawHTML, 'html.parser').body.getText()

    outputFile = open(str(year) + '.txt', 'w')

    outputFile.write(cleanedText)

    outputFile.close()

def pullNote1(year):
    inputFile = open(str(year) + '.txt', 'r')

    inData = inputFile.read()

    outData = re.findall('Note 1 –(.*?)Note 2 ', inData)

    print(outData)

    inputFile.close()

downloadCleanText('https://www.sec.gov/Archives/edgar/data/320193/000032019317000070/a10-k20179302017.htm#s2A826F0B8B5755F787D29B5B8C8C7D16', 2000)
pullNote1(2000)
马丁·彼得斯

不,0x96是不是一个ASCII码值ASCII 标准仅定义了 7 位代码点,因此从 0x00 到 0x7F。0x96 也不是有效的UTF-8 字节序列

您很可能已将源代码保存为Windows 代码页 1252,其中 0x96 是U+2013 EN DASH代码点(1250 和 1258 之间的所有代码页都是如此,但 1252 是最广泛使用的)。因此,按照异常消息,您可以通过添加以下内容来消除错误:

# encoding: cp1252

在文件的顶部。或者,您可以将编辑器配置为将文件另存为 UTF-8(此时将写入字节序列 0xE2 0x80 0x93 以表示该代码点)。

或者,通过\uhhhh在字符串文字中使用转义序列,在源代码中仅使用 ASCII 字符

outData = re.findall('Note 1 \u2013(.*?)Note 2 ', inData)

您可能想阅读 Unicode 和 Python,我强烈推荐 Ned Batchelder 的Pragmatic Unicode

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章