首页 > 解决方案 > 在python中转换为阿拉伯语文本

问题描述

我在 mysql 表中有 charset-utf-8 的数据。我有一个 pyspark 脚本,它加载 mysql 数据并在 s3 存储桶中写入一个 parquet 文件。从 mysql 获取数据时,我得到以下格式的数据:

'الشرقية'

然后我将它转换为 utf-8 编码,得到以下 unicode 字符串:

'\xc3\x98\xc2\xa7\xc3\x99\xe2\x80\x9e\xc3\x98\xc2\xb4\xc3\x98\xc2\xb1\xc3\x99\xe2\x80\x9a\xc3\x99\xc5\xa0\xc3\x98\xc2\xa9'

之后,我将其解码为 mac_arabic 编码,然后我得到以下文本:

'أ»آ'أôقÄûأ»آ٤أ»آ١أôقÄöأôإ أ»آ)'

有没有办法从这些字符串中的任何一个生成阿拉伯文本。

下面是代码

sqlContext = SQLContext(sc)
df = sqlContext.read.format("jdbc").options(
                                       url="jdbc:mysql://localhost/db_name",
                                       driver="com.mysql.jdbc.Driver",
                                       dbtable="table",
                                       user="root",
                                       password="root"
                                      ).load()

df.show()

对于下表中的列,设置了配置:CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL

为以下数据库设置了配置:ENGINE=InnoDB AUTO_INCREMENT=42627 DEFAULT CHARSET=latin1

提前致谢。

标签: pythonmysqlpysparkpyspark-sql

解决方案


您平台上的 JDBC 驱动程序版本默认不使用 UTF-8 编码。如上面评论中所述,尝试将编码显式传递给驱动程序:

df = sqlContext.read.format("jdbc").options(
    url="jdbc:mysql://localhost/db_name?characterEncoding=utf8",
    driver="com.mysql.jdbc.Driver",
    dbtable="table",
    user="root",
    password="root").load()

推荐阅读