关于字符集和Unicode的相关知识[译]

作者:Joel Spolsky 时间:2010-03-13 14:17:00 

每个程序员都绝对必须知道的关于字符集和Unicode的那点儿事(别找借口!)

Unicode与字符集


你曾经是否觉得HTML中的"Content-Type"标签充满神秘?虽然你知道这个东西必须出现在HTML中,但对于它到底干吗你可能一无所知。

你是否曾经收到过来自你保加利亚朋友的邮件,到处都是"???? ?????? ??? ????"?

我很失望,因为我发现许多软件开发人员到现在为止都还没有对字符集、编码、Unicode有一个清晰的认识,这是个事实。几年前,在测试FogBUGZ项目时,忽然想看看它能不能接收用日文写的电子邮件。这个世界上会有人用日文写电子邮件?我不知道。测试结果很糟糕。我仔细看了用来解析MIME (Multipurpose Internet Mail Extenisons)格式的邮件所用的ActiveX控件,发现了它在字符集上面做的蠢事。于是我们不得不重新写一段代码,先消除Active控件的错误,然后再完成正确的转换。类似的事情在我研究另一个商业库的时候同样发生了,这个库关于字符编码这部分的实现简直糟透了。我找到它的开发者,把存在问题的包指给他,他却表示对于此无能为力。像很多程序员一样,他只希望这个缺陷会被人们遗忘。

事实并非如他所愿。因为我发现,像PHP这么流行的网页开发工具,竟然在实现上也完全忽略了多种字符编码的存在(译者注:这篇文章写于2003年,现在的 PHP可能已经纠正了这个问题吧),盲目地只使用8个比特来表示字符,于是开发优秀的国际化的Web应用程序变成了一场梦。我想说,受够了。

我申明:在2003年,如果你是一个程序员,但你却对字符、字符集、编码和Unicode一无所知,那么你别让我抓到你。如果落在我手里,我会让你待在潜水艇里剥六个月的洋葱,我发誓。

另外,还有一件事:

这个一点都不难。

在这篇文章里,我所讲的是每一个工作中的程序员都应该知道的知识。所有以为"纯文本 = ASCII码 = 一个字符就是8比特"的人不单单错了,而且错得离谱。如果你仍然坚持使用这种方式编写程序,那么你比一个不相信细菌的存在医生好不到哪里去。所以在你读完这篇文章以前,不要再写半行代码。

在我开始之前,必须说明白,如果你已经了解了国际化,可能你会觉得这篇文章过于简单。没错,我的的确确是想架一座最短的桥,让任何人都可以理解发生了什么事,懂得如何写出可以在非英文语言环境是正常工作的代码。还得指出,字符处理仅仅是软件国际化中的一小部分,但一口吃不成个胖子,今天我们只看什么是字符集。

标签:字符,unicode,知识
0
投稿

猜你喜欢

  • Python基于React-Dropzone实现上传组件的示例代码

    2021-04-01 19:53:03
  • python 多进程和协程配合使用写入数据

    2023-01-31 10:48:25
  • 利用Python计算KS的实例详解

    2021-10-16 12:24:09
  • 线程安全及Python中的GIL原理分析

    2022-09-06 11:16:20
  • python orm 框架中sqlalchemy用法实例详解

    2021-04-22 18:03:28
  • asp如何获知页面上的图象的实际尺寸?

    2009-11-24 20:50:00
  • python 基本数据类型占用内存空间大小的实例

    2021-08-10 21:59:03
  • 使用python matplotlib 画图导入到word中如何保证分辨率

    2023-06-30 21:07:31
  • Python判断字符串是否为空和null方法实例

    2021-06-27 07:47:23
  • python实现打砖块游戏

    2023-11-09 21:27:15
  • python中下标和切片的使用方法解析

    2022-10-26 07:14:52
  • JavaScript预解析及相关技巧分析

    2024-04-10 10:57:32
  • 一文详解golang延时任务的实现

    2024-03-23 16:00:16
  • Python定义一个跨越多行的字符串的多种方法小结

    2022-08-04 03:34:27
  • PL/SQL 日期时间类型函数及运算

    2009-02-26 10:45:00
  • 简单触发器的使用 献给SQL初学者

    2011-09-30 11:27:49
  • Python中的wordcloud库安装问题及解决方法

    2022-04-14 21:38:43
  • Oracle 查看表空间的大小及使用情况sql语句

    2023-07-14 20:06:31
  • python中反射用法实例

    2023-04-10 09:13:49
  • MySQL多实例安装开机自启动服务配置过程

    2024-01-14 14:32:17
  • asp之家 网络编程 m.aspxhome.com