目录
Python2.7 中文字符编码,使用Unicode时,选择什么编码格式?
回复内容:
关于编码和乱码的问题,我简单讲一下。通常问这类问题的人是混淆了若干个不同的概念,并且他们自己也没有意识到自己混淆了这些概念的。
- 终端显示字符的编码(windows下终端是cmd,linux下是各种terminal,远程登录是putty或者xshell)
- shell环境的编码。比如中文版windows用的是gbk(向下兼容gb2312),大多数linux发行版使用的是utf-8(LANG=zh_CN.UTF-8)。
- 文本文件的编码。这个通常取决于你的编辑器,而且有的编辑器支持多种编码的话,你可以在文本开头位置指定编辑器使用特定编码。比如# -*- coding: utf8 -*-,vim看到这行会默认将这个脚本认定为utf-8兼容编码格式。
- 应用程序的内部编码。一个字符串,作为数据只是一个字节数组,但是作为字符的数组,就有一个解析方式。java和python的内部字符编码是utf-16,python和java都支持用不同的编码来对字节数组进行decode来得到字符数组。
拿题主的问题来解释一下。
我在ubuntu kylin中文环境下默认terminal中做了同样的实验,但是结果和题主恰好相反:


看见没有?
题主和我都没有说谎,这是为什么呢?
因为
unicode("汉字","gb2312")
登录后复制
“字符”可以看成是一个抽象概念,如当楼主说“汉字”,其实他意思是表达的是表示这么一个概念的两个字符。
当字符在计算机中表示的时候,需要编码成二进制(字节),于是就出现了不同的编码方式,如 GBK, UTF-8 等。如 Kenneth 展示的,“汉字”这两个字符在 GBK 中编码为 0xBABAD7D6,而在 UTF-8 中编码为 0xE6B189E5AD97。
最终显示时,则还要根据所使用的字体,把抽象的字符转化成具象的图像。
所以,楼主的第一个问题在于虽然你看到的是“汉字”的图像,但其在该脚本的源文件中的字节编码可能是任何一种——在 Windows 下是 GBK 或 GB18030 等。于是 python 看到的是一串 GBK / GB18030 编码的字节,而你试图告诉 python 这是 UTF-8 编码的,那自然报错了。
第二个问题,对 SQL Server 不熟,不过看起来原因是当你把从数据库读出的数据(字节形式,可能是 GBK 等非 Unicode 编码)放入 unit 这个变量的时候,程序错把非 Unicode 编码的字节当成 Unicode 编码解释了。那么排查思路应该是搞清楚数据在读出时是什么编码(这可能跟数据存入时的编码相关,也可能跟数据库配置有关),以及存入 unit 时程序做了哪些转换。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前
By DDD
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

在Python中,如何通过字符串动态创建对象并调用其方法?这是一个常见的编程需求,尤其在需要根据配置或运行...

本文讨论了诸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和请求等流行的Python库,并详细介绍了它们在科学计算,数据分析,可视化,机器学习,网络开发和H中的用途
