gpt4 book ai didi

python - 使用python将波斯字符串保存到mysql数据库中

转载 作者:太空宇宙 更新时间:2023-11-04 10:16:07 24 4
gpt4 key购买 nike

我有一个包含波斯语字符串的变量,但我无法将该字符串正确保存到数据库中。我正在为 REST API 使用 flask ,并且正在从客户端获取字符串。这是我的代码:

@app.route('/getfile',methods=['POST'])
def get_file():
#check the validity of json format
if not request.json or not 'FileName' in request.json:
abort(400)
if not request.json or not 'FilePath' in request.json:
abort(400)
if not request.json or not 'Message' in request.json:
abort(400)
#retreive data from request
filename_=request.json['FileName']
filepath_=request.json['FilePath']
message_=request.json['Message']

try:
conn = mysql.connector.connect(host=DBhost,database=DBname,user=DBusername,password=DBpassword)
except:
return jsonify({'Result':'Error, Could not connect to database.'})

cursor_ = conn.cursor()
query_ = "INSERT INTO sms_excel_files VALUES(null,%s,%s,%s,0)"
data_ =(filename_,Dst_num_file,message_)
cursor_.execute(query_, data_)
last_row_id_=cursor_.lastrowid
conn.commit()

有问题的变量是message_。我可以正确保存英文文本,但不能保存波斯文本。我还在代码的顶部添加了 # -*- coding: utf-8 -*- ,但这并没有解决问题。但是,如果我用波斯语字符串手动填充 message_,它就会正确保存到数据库中。此外,如果我简单地返回 message_ 的值,它是正确的。

例如,这是当 message_ 包含字符串 'سلام' 时插入到数据库中的内容:

سلام

感谢任何帮助。

最佳答案

请注意,这是我第一次尝试阅读阿拉伯语/波斯语字符,因此以下信息可能不正确(将我的测试输出与您在您的文档中显示的波斯语字符串进行比较时,我可能犯了错误问题)。此外,到目前为止,我从未听说过 flask 。

话虽如此:

1587 1604 1575 1605 是代表您在 Unicode 中显示的波斯字符串的代码点序列。现在,在 HTML 中,Unicode 代码点(十进制)可以编码为 &#xxxx; 形式的实体。所以字符串 سلام该字符串在 HTML 中允许的表示形式之一

鉴于此,不当行为可能有两个可能的原因:

1) request.json['Message'] 已经包含/返回 HTML(而不是自然文本)并且(出于某种我不知道的原因)包含/返回 HTML 实体编码形式的相关字符串。所以这是您应该检查的第一件事。

2) cursor_.execute(...) 以某种方式将字符串编码为 HTML,从而(出于某种我不知道的原因)将您的字符串编码为 HTML 实体编码形式。也许您已经告诉您的数据库驱动程序将 message_ 中的非 ASCII 字符编码为 HTML 实体?

为了进一步分析,您可以检查在 request.json['Message'] 仅包含/返回 ASCII 字符的测试用例中发生了什么。

如果ASCII字符也作为HTML实体写入数据库,必然存在一个基本问题导致所有字符无一异常(exception)地被编码为HTML实体。

否则,您最终没有告诉您的数据库、您的数据库驱动程序或您的文件系统驱动程序要使用哪种编码。在这种情况下,ASCII 字符通常会被正确处理,而非 ASCII 字符会发生奇怪的事情。不过,在文件 IO 或数据库操作期间将非 ASCII 字符自动编码为 HTML 实体是非常不寻常的。但是上面说了,不知道flask ...

请查阅 MySQL 手册以了解如何为数据库、表、列和连接设置字符编码,您的数据库驱动程序文档以了解您必须做哪些其他事情才能正确处理此编码,以及您的解释器和它的库手册可以了解如何正确设置文件 IO 的编码(CGI 通过 STDIN/STDOUT 工作)。

如果数据库字符编码和文件 IO 编码完全相同,您的工作就会轻松很多。就个人而言,我总是使用 UTF-8。

最后一点:因为我对 Flask 一无所知,所以我不知道 # -*- coding: utf-8 -*- 应该做什么。但很有可能这只告诉解释器脚本本身是如何编码的,而不是告诉解释器输入/输出/数据库操作使用哪种编码

关于python - 使用python将波斯字符串保存到mysql数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46222582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com