首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用符号和特殊字符对国际字符串进行编码,以便存储在数据库中

如何用符号和特殊字符对国际字符串进行编码,以便存储在数据库中
EN

Stack Overflow用户
提问于 2018-08-24 20:22:50
回答 1查看 376关注 0票数 1

我想使用游戏中的API,并将玩家和家族的名字存储在本地数据库中。名称可以包含各种字符和表情符号。以下是我发现的几个例子:

  • яαℓαηι
  • نکل
  • 窝猫
  • 鐵擊道遊隊
  • ❤✖❤♠️♦️♣️✖

我使用python读取api并将其写入mysql数据库。之后,我想在Node.js web应用程序上使用这些名称。

对这些字符进行编码的最佳方法是什么,如何将它们保存在数据库中,以便以后能够正确地显示它们?

我尝试用utf-8对python中的字符串进行编码:

代码语言:javascript
复制
>>> sample = '蛙喜鄉民CLUB'
>>> sample
'蛙喜鄉民CLUB'
>>> sample = sample.encode('UTF-8')
>>> sample
b'\xe8\x9b\x99\xe5\x96\x9c\xe9\x84\x89\xe6\xb0\x91CLUB'

并将编码的字符串存储在具有utf8mb4_unicode_ci字符集的mysql数据库中。

当我从上面存储字符串并在mysql工作台中选择它时,它显示如下:

代码语言:javascript
复制
蛙喜鄉民CLUB

当我在python中再次从数据库中读取此字符串(并将其存储在db_str中)时,我得到:

代码语言:javascript
复制
>>> db_str
èåéæ°CLUB
>>> db_str.encode('UTF-8')
b'\xc3\xa8\xc2\x9b\xc2\x99\xc3\xa5\xc2\x96\xc2\x9c\xc3\xa9\xc2\x84\xc2\x89\xc3\xa6\xc2\xb0\xc2\x91CLUB'

第一个输出完全是胡言乱语,第二个输出的utf-8看起来很像上面编码的字符串,但在每个字节之间添加了\xc2\xc3

如何将这些字符串保存到mysql中,以便再次读取它们并在python脚本中正确显示它们?

我的数据库整理utf8mb4_unicode_ci不适合这样的内容吗?还是我必须使用另一种编码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-24 21:39:36

正如@abarnert在对这个问题的评论中所描述的那样,问题是用于编写unicode字符串的库不知道应该使用utf-8,因此对字符串进行了错误的编码。

在将charset='utf8mb4'作为参数添加到mysql连接后,字符串将以预期的编码方式正确写入。

我所要改变的就是

代码语言:javascript
复制
conn = MySQLdb.connect(host, user, pass, db, port)

代码语言:javascript
复制
conn = MySQLdb.connect(host, user, pass, db, port, charset='utf8mb4')

在那之后,我在问题中描述的方法完美无缺地发挥了作用。

编辑:在对连接对象声明charset='utf8mb4'参数之后,不再需要对字符串进行编码,因为现在mysqlclient库已经成功地完成了这一工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52011244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档