python处理emoji类型的字符问题!

zyfwj 2016-11-21 05:21:19
各位大牛,请教个问题,python3使用pymssql读取MssqlServer数据库中的微信昵称,微信昵称中有emoji等特殊类型的字符串,print()的时候直接报错了,请问如何处理,谢谢!
字符串如下:

测试代码如下:

import pymssql
conn = pymssql.connect(server="127.0.0.1",user="sa",password="123456",database="test",charset="utf8")
cursor = conn.cursor()
cursor.execute("SELECT nickname FROM childshop where id=284")
row = cursor.fetchone()
while row:
print(str(row[0]))
row = cursor.fetchone()
...全文
2490 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peter_Yeo 2019-03-16
  • 打赏
  • 举报
回复
用cc = re.findall('[\u4e00-\u9fa5]', string)去提取中文或者英文不也可以吗?我用的反向思维
Rainy Chan 2018-02-28
  • 打赏
  • 举报
回复
mysql里的utf-8不支持4个字节的empji,会出问题,需要utf8mb4 sqlserver不知道这块怎么样
zyfwj 2016-11-28
  • 打赏
  • 举报
回复
引用 9 楼 raining 的回复:
试了一下,完全没问题。 那两个三角应该是 \u25b2 \u25bc,▲ ▼,应该是很普通的字符。 python 3.4.5, pymssql 2.1.3 你的应该是在fetchone的时候就出错了,但是不清楚你的情况。
是的 在fetchall这个阶段直接报错了,很奇怪,而且就是在这个地方报错,前面的数据能正常读出来
raining 2016-11-24
  • 打赏
  • 举报
回复
试了一下,完全没问题。
那两个三角应该是 \u25b2 \u25bc,▲ ▼,应该是很普通的字符。

python 3.4.5, pymssql 2.1.3


你的应该是在fetchone的时候就出错了,但是不清楚你的情况。
zyfwj 2016-11-24
  • 打赏
  • 举报
回复
引用 7 楼 raining 的回复:
[quote=引用 6 楼 zyfwj 的回复:] 其实遇到这个字符得时候,没到print(row[0])得时候已经报错了,row[0]在mssqlserver中存储的字段是nvchar字段类型
没到print()就出错了?[/quote] 是的。我注释掉#print(row[0]), while row: #print(row[0]) row = cursor.fetchall() 还是报同样的错误
raining 2016-11-24
  • 打赏
  • 举报
回复
引用 6 楼 zyfwj 的回复:
其实遇到这个字符得时候,没到print(row[0])得时候已经报错了,row[0]在mssqlserver中存储的字段是nvchar字段类型
没到print()就出错了?
zyfwj 2016-11-24
  • 打赏
  • 举报
回复
引用 5 楼 raining 的回复:
[quote=引用 4 楼 zyfwj 的回复:]
修改print(row[0])后,错误代码如下:


看起来是编码问题。第一个字节是0xFF,也许是用的utf-16?
猜测是程序试图以utf-8去解码造成的。

row[0]是什么类型呢? 用print(type(row[0]))看看,如果可以,用utf-16解码试试呢。[/quote]

其实遇到这个字符得时候,没到print(row[0])得时候已经报错了,row[0]在mssqlserver中存储的字段是nvchar字段类型
zyfwj 2016-11-22
  • 打赏
  • 举报
回复
修改print(row[0])后,错误代码如下:
raining 2016-11-22
  • 打赏
  • 举报
回复
引用 4 楼 zyfwj 的回复:
修改print(row[0])后,错误代码如下:
看起来是编码问题。第一个字节是0xFF,也许是用的utf-16? 猜测是程序试图以utf-8去解码造成的。 row[0]是什么类型呢? 用print(type(row[0]))看看,如果可以,用utf-16解码试试呢。
sprawling 2016-11-21
  • 打赏
  • 举报
回复
最好的方法是不處理這類數據,因爲emoji是不同處理軟件自己定義的,問題還是比較多的。
raining 2016-11-21
  • 打赏
  • 举报
回复
报错的信息呢? 先看看 row[0] 的类型和内容是什么,别急着转成 str
屎克螂 2016-11-21
  • 打赏
  • 举报
回复
错误信息呢? 应该是str(row[0])转换出错, 改成 print(row[0].decode('utf-8')) 或 print(row[0]) 试试

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧