字符编码应用

版本: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. 添加字符编码简明教程的链接

目录

正文之前
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. 声明

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

第 1 章 常见字符编码类型

摘要

关于常见的字符编码的

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

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

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

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

摘要

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

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中第三方库函数可以用来动态地检测字符的编码类型:

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

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

摘要

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

3.1. Notepad中的字符编码

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

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

3.2. Notepad2中的字符编码

3.4. Eclipse中的字符编码

Eclipse中的默认的(文件的字符)编码

3.5. Sublime中的字符编码

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

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

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

3.6. UltraEdit中的字符编码

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

摘要

4.1. Windows系统中的字符编码

Windows中系统中的CodePage

cmd的默认编码是ANSI

参考书目