字符编码应用

版本：v0.7.0

Crifan Li

摘要

本文主要介绍了字符编码的各种应用，包括常见的字符编码有哪些类型，常见的各种编码规范和编程语言中对于各种字符编码的支持，常见的各种软件和工具对于字符编码的支持，常见的不同操作系统中对于不同编码的支持。

[提示] 本文提供多种格式供：
在线阅读 | HTML | HTMLs | PDF | CHM | TXT | RTF | WEBHELP
下载（7zip压缩包） | HTML | HTMLs | PDF | CHM | TXT | RTF | WEBHELP

HTML版本的在线地址为：

http://www.crifan.com/files/doc/docbook/char_encoding_usage/release/html/char_encoding_usage.html

有任何意见，建议，提交bug等，都欢迎去讨论组发帖讨论：

http://www.crifan.com/bbs/categories/char_encoding_usage/

2015-05-24

修订历史
修订 0.7.0 2015-05-24 crl
  1. 介绍字符编码的应用
  2. 添加字符编码简明教程的链接

版权 © 2015 Crifan, http://crifan.com

本文章遵从：署名-非商业性使用 2.5 中国大陆(CC BY-NC 2.5)

目录

正文之前
1. 目的
2. 声明
1. 常见字符编码类型
2. 常见的规范和编程语言中对于字符编码的支持
2.1. XML的编码声明
2.2. JSON中的字符编码
2.3. HTML的charset
2.4. Python中的字符编码
2.5. C#中的字符编码
2.6. Java中的字符编码
3. 常见工具中所涉及的字符编码
3.1. Notepad中的字符编码
3.2. Notepad2中的字符编码
3.3. Notepad++中的字符编码
3.4. Eclipse中的字符编码
3.5. Sublime中的字符编码
3.6. UltraEdit中的字符编码
4. 常见系统中的对于不同编码的支持
4.1. Windows系统中的字符编码
参考书目


正文之前

目录

1. 目的
2. 声明

1. 目的

本文旨在讲清楚字符编码的在各种不同语言，环境，工具，操作系统等方面的应用。


2. 声明

任何问题、意见、建议等，都欢迎发邮件一起探讨：admin (at) crifan.com。


第 1 章 常见字符编码类型

摘要

关于常见的字符编码的

  • 详尽解释，可以参考：字符编码详解
  • 精简介绍，可以参考：字符编码简明教程

接着再去看下面的介绍，则就很容易理解了：

目前一些常见的字符编码类型有：

  1. 最常见编码类型：ascii utf8 gbk
  2. 其次：gb2312,iso8859-1
  3. 再次是其他的编码


第 2 章 常见的规范和编程语言中对于字符编码的支持

目录

2.1. XML的编码声明
2.2. JSON中的字符编码
2.3. HTML的charset
2.4. Python中的字符编码
2.5. C#中的字符编码
2.6. Java中的字符编码

摘要

也可以叫做：字符编码在常见规范和语言中的应用

2.1. XML的编码声明

xml文件中，第一行的内容，就包含了字符编码声明

比如：

<?xml version='1.0' encoding="utf-8"?>

其中指定了编码类型encoding为UTF-8类型。


2.2. JSON中的字符编码

参考：序列化Python对象 - 深入Python 3

第三, 字符编码的问题是长期存在的。JSON 用纯文本编码数据, 但是你知道, “不存在纯文本这种东西。” JSON必须以Unicode 编码(UTF-32, UTF-16, 或者默认的, UTF-8)方式存储, RFC 4627的第3节 定义了如何区分使用的是哪种编码。

看起来好像说的是：JSON编码必须是Unicode编码？

有空再去确认。


2.3. HTML的charset

HTML中是通过charset来声明当前网页所使用的字符编码是何种类型的

最常见的比如：

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

其中指定了编码类型charset为UTF-8类型。


2.4. Python中的字符编码

Python 2.x中的str和unicode

Python 3.x中的bytes和str

系统默认编码：sys.defencoding？？？ 是ANSI

-->>导致很多人在使用Python时出现编码错误后，结果去想办法修改sys.defencoding的值

-->>实际上不应该这么做，而应该是搞清楚自己要处理的python文件的编码是什么，然后加上对应的编码声明

详见：

【整理】Python中用encoding声明的文件编码和文件的实际编码之间的关系

【整理】关于Python脚本开头两行的：#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型

【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法

更多内容可参考另外一个教程：

Python专题教程：字符串和字符编码

Python中有个库，专门用来检测字符串是什么编码的。

详见：【已解决】windows下，安装python的chardet | 在路上


2.5. C#中的字符编码

在用C#进行网页处理时，网络爬虫抓取得到网页的原始字符串后，需要解码才能得到unicode的字符串

详见：【整理】关于HTML网页源码的字符编码（charset）格式（GB2312，GBK，UTF-8，ISO8859-1等）的解释 | 在路上中的"从原始html中解码为对应的unicode字符串"


2.6. Java中的字符编码

Java中第三方库函数可以用来动态地检测字符的编码类型：

  • juniversalchardet
  • jchardet
  • cpdetector
  • ICU4J

详见：java - What is the most accurate encoding detector? - Stack Overflow


第 3 章 常见工具中所涉及的字符编码

目录

3.1. Notepad中的字符编码
3.2. Notepad2中的字符编码
3.3. Notepad++中的字符编码
3.4. Eclipse中的字符编码
3.5. Sublime中的字符编码
3.6. UltraEdit中的字符编码

摘要

字符编码在常见软件中的应用

3.1. Notepad中的字符编码

notepad 支持不多但也有最基本的。这就是别人拿来演示神奇的保存一个词 联通 打开后显示其他字符的奥秘所在

TODO：抽空找到网上流传很广的那个，写一个联还是通，换个编码保持，结果再打开显示出另外一个字的效果


3.2. Notepad2中的字符编码


3.3. Notepad++中的字符编码

详见：

【crifan推荐】轻量级文本编辑器，Notepad最佳替代品：Notepad++中的：Notepad++的多种编码支持


3.4. Eclipse中的字符编码

Eclipse中的默认的（文件的字符）编码


3.5. Sublime中的字符编码

sublime 也可以保存成不同编码，虽然支持的不够多

但是对于及时显示当前文件的编码，支持的不是足够好：

【基本解决】Sublime中竟然不能方便地找到哪里可以显示当前文件的编码类型 | 在路上


3.6. UltraEdit中的字符编码


第 4 章 常见系统中的对于不同编码的支持

目录

4.1. Windows系统中的字符编码

摘要

4.1. Windows系统中的字符编码

Windows中系统中的CodePage

cmd的默认编码是ANSI


参考书目

[1] 【转】字符编码笔记：ASCII，Unicode和UTF-8