Python解码为阿拉伯语



我使用的是Apache Airflow,这是我的PythonOperator中用于收集数据的函数。我的数据有阿拉伯字符串。现在,当我在不将字符设置为utf8的情况下执行查询时,我会得到"????"&";。所以我在下面做了这个设置。但问题仍然没有解决,我到了最后";

在阿拉伯语中,它应该是";مح;

query = "select * from test_sample limit 1;"
source_hook = MySqlHook(mysql_conn_id='mysql_conn', schema='mysql')
source_conn = source_hook.get_conn()
source_cursor = source_conn.cursor()
source_cursor.execute("SET NAMES utf8;") 
source_cursor.execute("SET CHARACTER SET utf8;") 
source_cursor.execute("SET character_set_connection=utf8;")
source_cursor.execute(query)    
columns = [col[0] for col in source_cursor.description]
records_data = [dict(zip(columns, row)) for row in source_cursor.fetchall()]
record = records_data[0]
test_a = record['name']
print(test_a)

当你粘贴ÙØ­Ùد اÙÙاجرÙ时,你可以在这里查看这个链接,你可以看到محمد الهاجرى上面的阿拉伯语输出。但我无法在代码中获取它。有什么想法吗?

我创建了我的表格如下:

CREATE TABLE IF NOT EXISTS `test_sample` (
`ID` int(10) NOT NULL,
`name` varchar(255)  DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

感谢Rick和大家的回复

我将在这里发布我如何解决我的问题:

在深入研究了实际上没有必要的问题之后,因为答案一直摆在我面前,哈哈。由于我使用的是Apache Airflow,而我错过添加的连接配置是在extra{"charset":"utf8"}中。确实解决了!这是参考资料(https://airflow.apache.org/docs/apache-airflow-providers-mysql/stable/connections/mysql.html)

此外,我的mysql.cnf配置被设置为-不确定它是否会有任何不同,尽管-为:

[client]
default-character-set = utf8mb4
[mysqld]
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init-connect = SET NAMES utf8mb4
[mysql]
default-character-set = utf8mb4

同样适用于表格:

CREATE TABLE IF NOT EXISTS `test_sample` (
`ID` int(10) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

我删除了MySqlHook中所有不再需要的连接代码:

source_cursor.execute("SET NAMES utf8;") 
source_cursor.execute("SET CHARACTER SET utf8;") 
source_cursor.execute("SET character_set_connection=utf8;")

希望它也能帮助其他人,干杯!

最新更新