我写了一个发短信的小工具,只要输入发送内容和手机号码就会自动发送短信,当我输入的内容是英文时没有任何问题,但当我输入中文时,检查出来的编码竟然是 {'confidence': 0.38398486178080915, 'language': 'Russian', 'encoding': 'KOI8-R'} 然后插入数据库操作也会报错 UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 181: invalid start byte,输出详细错误是('Error:', UnicodeDecodeError('utf8', "insert into sms_wait_for_send (orgaddr,destaddr,sendtime,validtime,msgtext,serviceid,feecode,feetype,sendstatus,msgfmt,code_3) select '106583187',13888888888,1565142615,1565178615,'\xb2\xe2\xca\xd4','MF','0','01',1,8,'broadcast' ", 181, 182, 'invalid start byte')),中文的编码变成了这个,请问这该怎么解决啊。
# -*- coding:utf-8 -*-
import json,pyodbc,time,sys,chardet
reload(sys)
sys.setdefaultencoding ('utf-8')
conn=pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=XXX;DATABASE=XXX;UID=XXX;PWD=XXX')
cursor = conn.cursor()
stopword = ''
str1 = ''
values=''
word=raw_input("Text:")
word=word.decode("KOI8-R")
word=word.encode("gbk")
print chardet.detect(word)
print word
print('PhoneNumber:')
for line in iter(raw_input, stopword):
str1 += line + '\n'
now = int(time.time())
future=now+36000
values=values+'select'+' '+"'106583187'"+','+line+','+str(now)+','+str(future)+','+"'"+word+"'"+','+"'MF'"+','+"'0'"+','+"'01'"+','+str(1)+','+str(8)+','+"'broadcast'"+' union all '
values1="insert into sms_wait_for_send (orgaddr,destaddr,sendtime,validtime,msgtext,serviceid,feecode,feetype,sendstatus,msgfmt,code_3) "+values
values2=values1[:-10]
print values2
s=cursor.execute(values2)
if (s==1):
print "Success!"
else:
print "Fail!"
conn.close()
1
mywaiting 2019-08-07 10:33:06 +08:00
字符串编码的问题?将 python, mysql client, mysql charset, mysql table charset 等这些统一为 utf8mb4 试试看
|
2
11ssss 2019-08-07 13:41:56 +08:00
字符编码的问题
|
3
bertsir 2019-08-07 13:56:48 +08:00
为啥不用 utf8
|
4
zqjilove 2019-08-07 13:59:01 +08:00
1 楼正解吧,之前也碰到过
|
5
mrchi 2019-08-07 14:10:32 +08:00
|
6
Destiny97 2019-08-07 14:22:59 +08:00 via Android
短信的编码好像有点特殊,有可能是这个问题
|
8
CR7sun OP @Destiny97 这里面短信内容应该是必须 GBK 编码,但是短信内容编码感觉怎么都转不到 GBK 一执行插入操作就显示 UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 181: invalid start byte
|
11
CR7sun OP @mrchi 数据库都是 chinese_PRC_CI_AS 这种编码,然后插入语句只要短信内容部分是 GBK 编码就行了,不知道为什么总是插入出错,print 打印出来的语句在数据库里都是可以正常执行的。。。
|
12
mrchi 2019-08-07 17:56:32 +08:00
去掉这一行,word=word.decode("KOI8-R"),
word=word.encode("gbk") 这一行用 word=word.encode("utf8") 试试 |