前端发送中文给后端

前端发送中文给后端,后端收到的是Unicode·编码的中文
如果直接在python的终端用python的print 的话,print出来的就是中文
直接输出的话,还是 u’\u6545\u969c\u5f55\u6ce2’ 中文是故障录波

>>> a =  u'\u6545\u969c\u5f55\u6ce2'
>>> a
u'\u6545\u969c\u5f55\u6ce2'
>>> print a
故障录波
>>>

在数据库中进行模糊查询的话,直接输入Unicode编码的中文进行模糊查询就是可以查询到结果的。

filter_ = {u'group': u'*', u'keyword': u'\u6545\u969c\u5f55\u6ce2', u'level': u'*', u'area': u'*', u'system': u'*', u'isConfirm': False, u'isReset': u'*'}
if filter_['keyword'] != '*':
     sql += "and CONTENT like '%{}%'".format(filter_['keyword'].encode('utf-8'))

unicode 是什么?

首先Unicode是一个字符集,很牛,它包含世界上所有的字符,每个字符对应一个二进制编码,用两个字节保存。这样的话所有国家的所有字符都可以在网络上自由的传输,但是这样做有个问题就是本来英文字母A,用ASCII编码是十进制的65,二进制的01000001,一个字节就可以保存,如果按照Unicode的标准需要两个字节保存,白白浪费了一个字节,这样肯定不好,如果我是美国人也不想要这样的结局,所以就通过人们的智慧就出现了UTF-8。

utf8是什么?

UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。那么通过UTF-8编码之后字母A只需要一个字节就可以了,这样美国人就比较开心了,但中国人又不太开心,因为汉字通过UTF-8编码之后通常需要三个字节,多花了一个字节,这个时候相比中国自己的GB2312编码方式显得不是很厚道,但为了世界统一,UTF-8的出现利大于弊,如果每个国家都按照自己的方式来,互联网就乱了。UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

unicode and utf8的关系?

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。所以UTF-8的出现是为了更好的存储和网络传输,如果传输的内容多为字母,那么这种方式将会节约不少流量,就酱。

unicode 与python的关系

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
即:其他编码->解码(decode)->unicode->编码(encode)->其他编码2

unicode 与 python中 decode & encode的关系

decode 的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。

代码中字符串的默认编码与代码文件本身的编码一致

如:s=‘中文’

如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

如果字符串是这样定义:s=u’中文’

则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。

python的内部默认编码是什么?

unicode 这个很重要,在python中Unicode编码的字符串可以直接encode为其他的编码。

总结

  1. 前端向后端传递的中文,是unicode编码的。
  2. 在写sql的时候,可以把中文按照数据库的默认编码方式进行encode即可
  3. 有的时候sql语句在控制台打印出来是乱码,把控制台的sql语句粘贴到sql执行软件上直接执行,也是不识别的,那是因为python终端的默认编码方式不是utf8的。直接把乱码粘贴过去肯定是不行的。
  4. 在控制台打印出来是乱码,在sql执行时不一定就是不能执行的乱码,因为不同的终端的默认编码是不一致的。
  5. sqlite中文的默认编码是utf8
  6. python 的默认编码是unicode
  7. python中在做代码转换时,是以unicode作为中间编码的
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐