zoukankan      html  css  js  c++  java
  • Unicode和字符集的基础知识

    一个字符串不指定它使用什么编码是没有意义的。

    再也不要假定,“纯”文本(plain text)是ASCII.

    没有“纯文本”这个东西。

    如果你有一个字符串,在内存中,在文件中,或者在 Email 消息里,你必须知道它的编码是什么。否则你无法正确的解释或者显示给用户。

    所有的诸如 “我的网页不能正常显示了”,或者 ”Email 消息不能正常显示了“ 之类的愚蠢问题, 都是因为, 没有告诉你到底是使用的那种编码,

    UTF-8 还是 ASCII 还是 ISO 8859-1 或者 Windows 1252 ?? 那么自然无法正常的解释和显示,甚至不知道字符串该在哪里结束。

    那么如何保留这样的编码标志,来表示字符串的编码? 有一些基本的办法。

    比如对于 Email 来说,在表单的 header 中加上:

    Content-Type:text/plain;charset="UTF-8"

    对于 Web 页面来说,原来的做法是, Web 服务器随着 web 页面本身一起,发送一个类似于 Content-Type 的 http header.

    (不是在 HTML 里面,而是作为一个 response header 在 HTML 页之前发送)

    这样做有一个问题。如果你的 Web 服务器同时有多个站点,站点由多个不同的人用不同的语言开发的程序混在一起。那么 Web 服务器将无从得知,

    每一个文件是用什么编码方式写的。这样也就无法发送正确的 Content-Type header.

    如果你能够在每一个 HTML 文件中记录 Content-Type 信息,那么就很方便了。可这念头似乎也很疯狂,因为你还没有知道用什么编码方式去

    读取这个文件,又怎么能读出编码信息呢?

    幸好,几乎每一种编码中,对 32~127 的字符都解释的相同。所以你可以在每一个 html 文件中这么写:

    < html >

    < head >

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

    但是要注意, 这个 meta 标签必须放在 head 中靠前面的位置才能保证不会出问题。 因为 Web 服务器读到这里的时候,就会停止解析,

    然后用读到的这个编码方式重新解析页面。

    那么,作为 Web 浏览器来说,如果没有在 meta 标签中或者 http headers 中发现 Content-Type, 会怎么样呢?

    IE 是这么做的:

    先尝试去猜,根据特定的字节出现在各种语言的典型的编码中的频率。

    如果编码设定不正常,用户可以通过 View|Encoding 菜单来尝试不同的编码方式。(当然,不是每个人都知道该这样做)

    在 VB, COM, Windows NT/2000/XP 中,默认的字符串类型是 UCS-2(2字节)的。

    在 C++ 代码中, 我们可以定义字符串为 wchar_t(wide char),同时用 wcs 系列的函数代替 str 系列的函数。

    如 wcscat, wcslen, 而不是 strcat, strlen.

    在 C 代码中,要创建 UCS-2 字符串的话,只要在前面加一个 "L", 如 L"Hello"

    对于 Web 页面,最好统一为使用 UTF-8 编码。 这个编码已经被各种 web 浏览器支持了很多年了。


            原文地址: http://java.ccidnet.com/art/3737/20060605/571503_1.html

  • 相关阅读:
    bzoj 1179[Apio2009]Atm (tarjan+spfa)
    tarjan讲解(用codevs1332(tarjan的裸题)讲解)
    spfa
    codevs 1021 玛丽卡(spfa)
    Redis-mac安装与使用
    心血来潮整理一下STL——string
    基础算法整理(1)——递归与递推
    一道水的不能再水的中国盒子问题——小试牛刀(3)
    论久违的八数码问题——小试牛刀(2)
    8皇后及其普及(N)——小试牛刀(1)
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/731115.html
Copyright © 2011-2022 走看看