1

我试图从网页中获取某些阿拉伯语字符串,然后将这些字符串存储到数据库中。

第一个问题

.我能做的唯一方法是通过使用和使用 unicode来指定它们有多少个字母,如下所示:

import urllib,re
content=urllib.urlopen("http://example.com/content.html").read()
content = unicode(content,"utf-8")
Strings = re.findall("<Strong>...........</strong>",content) # it will work fine and fetch it but only strings with 11 char or letter (11 place) 

第二个问题

当我尝试将其写入文本文件时,它显示:

UnicodeEncodeError:“ascii”编解码器无法对位置 0-3 中的字符进行编码:序数不在范围内(128)

当我尝试将其存储到数据库中时,它会显示:

ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 '\xd8\xa7\xd9\x84\xd9\x82\xd8\xb5\ 附近使用的正确语法xd9\x8a\xd8\xb1)' 在第 1 行")

我的想法是获取它然后将其编码为base64,然后将其存储到db中,但仍然出现错误:

UnicodeEncodeError:“ascii”编解码器无法对位置 0-3 中的字符进行编码:序数不在范围内(128)

4

1 回答 1

1

我能做的唯一方法是使用 . 指定它们有多少个字母。并使用 unicode,像这样

好的……有问题吗?除了使用正则表达式从 HTML 中破解字符串的一般不可靠性之外,显然 - 考虑使用适当的解析器(例如 lxml.html 等)。

当我尝试将其写入文本文件时,它显示:UnicodeEncodeError

文件是字节,因此要写入文本文件,您必须将字符编码回字节。例如

with open('file.txt', 'w') as fp:
    fp.write(content.encode('utf-8'))

如果你尝试直接写字符,Python 会猜测一个编码,通常是 ASCII,然后会像上面一样失败,因为阿拉伯语不能用 ASCII 表示。

当我尝试将其存储到数据库中时,它会显示: ProgrammingError: (1064, “您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 '\xd8\ 附近使用的正确语法xa7\xd9\x84\xd9\x82\xd8\xb5\xd9\x8a\xd8\xb1)'

邮政编码?我不认为这是一个 Unicode 问题。它看起来更像是您正在创建一个包含其中内容的查询,而没有用引号括住该内容。不要那样做 - 使用参数化查询。

c.execute('INSERT INTO something VALUES ('+content+')')     # fails, and security horror
c.execute('INSERT INTO something VALUES (%s)', (content,))  # fine

我考虑的是获取它然后将其编码为base64

同样,base64 对字节而不是字符进行操作,因此首先进行编码。

content.encode('utf-8').encode('base64')

但您不必编码为 base64 以将 Unicode 字符存储在数据库中。确保您使用的是带有 UTF-8 排序规则的表列,并使用 UTF-8 作为连接字符集,并且不需要额外的处理。

于 2012-11-02T14:52:07.350 回答