我试图从网页上获取某些阿拉伯字符串,然后将这些字符串存储到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用作连接字符集,并且不需要额外的处理。

09-26 20:47