我试图从网页上获取某些阿拉伯字符串,然后将这些字符串存储到db中。
第一个问题
我唯一的方法是使用.
和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)
最佳答案
我唯一的方法是使用来指定它们包含多少个字母。并像这样使用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用作连接字符集,并且不需要额外的处理。