我试图从网页上获取某些阿拉伯字符串,然后将这些字符串存储到数据库中。
第一个问题
唯一可行的方法是使用.
指定多少个字母并使用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)
答案 0 :(得分:1)
好的......这是一个问题吗?除了使用正则表达式从HTML中破解字符串的一般不可靠性之外,显然 - 考虑使用适当的解析器(例如lxml.html等)。我唯一能做的就是用它来指定它们的字母数。并使用unicode,像这样
当我尝试将其写入文本文件时,它会显示: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作为连接字符集,并且不需要额外的处理。