签到天数: 38 天
[LV.5]常住居民I
计算机内存和文件不存储数字或字符本身,而仅存储位序列。根据某些编码,这些字符通常被解释为数字或字符。无论是数字还是字符,目前都存在非常不同种类的编码。
编码与字体人们不应混淆字符编码和字体的问题; 如今,这些方面通常是单独处理的。编码确定哪种字符(例如,某个字母)与某个位序列相关联,而字体则确定该字符在屏幕上显示或打印时的外观。通过使用不同的字体,例如,一个字母“ A”可以具有不同的图形外观。
ASCI编码对于字符,早期使用 ASCII 编码,仅提供128个可用的不同字符,以单个字节(一组8位)表示,其中仅使用低7位。当然,这仅对于最简单的目的就足够了。ANSI代码页由于需要更多不同的字符,因此人们很快开始使用扩展的字符范围,其中使用了可以用8位编码的完整256个字符。但是,已经使用了(但仍在使用)这种 ANSI 字符集的许多不同版本。其中一些主要包含重音字母(例如法语)之类的内容,而其他一些包含其他语言的字母或更多特定类型的符号(例如,箱形图符号)。基本上,问题是这个世界上的整个人需要远远超过256个不同的字符。在 Windows 中,不同的 ANSI 字符集以所谓的代码页为特征(最初由 IBM 引入)。例如,在欧洲部分地区,Windows系统通常使用代码页1252“西欧”。请注意,对于像日本这样需要256个以上字符的国家,8位不足以表示一个字符。尽管使用不同的 ANSI 代码页可以使用各种各样的字符,但是这种方法存在严重的局限性。特别地,例如以这种编码显示文本文件的内容时,这仅在相应的代码页是已知的并且被正确考虑时才正确地起作用。不幸的是,纯文本文件通常在使用的代码页上不包含任何信息,因此通常需要其他信息(例如,由用户手动发送)才能正确显示此类文件;如果有此类信息,则可能正确也可能不正确。另外,除非文件只包含在两个代码页中都出现的字符,否则当然不能将文件从一个代码页转换为另一代码页而不会造成信息丢失。Unicode作为通用解决方案为了解决这些问题,已经开发了 Unicode系统(即,与各种编码系统结合的Unicode字符定义)。在这里,可以对大量不同的字符(每个字符用一个所谓的代码点表示)进行编码-实际上是通常需要的任何字符。当然,一个字节(8位)不足以编码任意 Unicode 字符。现在,有两种不同的编码方案可用于处理计算机内存或文件中的 Unicode 字符。一种通用的方案是 UTF-16,其中一个字符通常使用16位(2字节),但是对于某些字符,实际上使用了其中的2个,即总共32位,称为代理对。该方案对于在 CPU 和主存储器中使用非常实用。Unicode 字符的另一种常见编码方案是 UTF-8,其中最常见的字符是用一个字节(8位)编码的,其他大多数字符则需要两个字节,有些甚至需要三个或四个字节。例如,只有在已知使用的编码(例如 ANSI 或 Unicode,以及哪种特定方案)的情况下,才能正确处理计算机文件的内容。不幸的是,该信息经常由于错误的编码假设而丢失或损坏。通过在文件的开头写入一个由几个字节组成的所谓的字节序标记(BOM),已解决了许多 Unicode 文件的问题。在文本文件中找到这样的 BOM 的程序可以使用它来确定(a)它是 Unicode 文件,以及(b)确切使用了哪种UTF编码。但是,例如对于使用Unicode而不使用 Unicode 的网页,这很常见。BOM;使用的编码在其他地方(在页面内容之前发送的HTTP标头中)指示。这样,软件通常很难或不可能确定某个文件使用了哪种编码。向用户询问可能是不切实际的,或者是行不通的,因为用户也不知道。当然,对于一个字符不使用固定数目的字节的编码意味着一些技术上的困难。例如,为了找到这样一个字节序列中的第23个字符,必须从头开始对其进行扫描,以便正确考虑每个先前字符的字节数。由于这些困难,修改旧软件以使其能够处理 Unicode 数据通常并不容易。原则上可以通过使用 UTF-32 编码解决此问题,其中每个字符都由32位(4字节)表示,但是很少使用,因为它不提供用于存储文本的内存有效方式。我们软件中的编码处理在 RP Photonics 的软件的早期版本(2017年之前)中,整个内部都使用UTF-16形式的Unicode,但是文本文件(例如脚本)是根据 Windows 系统的标准代码页以ANSI编码编写的。这种方法很普遍,但是却给日本用户带来了麻烦。另外,还存在(罕见)问题,例如希腊语的 μ(微)字符丢失或在某些代码页中的编码方式不同。因此,现在工作已进行了深刻的现代化,得出以下规则:联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )
GMT+8, 2024-11-6 11:41 , Processed in 0.109375 second(s), 21 queries .
Powered by Discuz! X3.5
© 2001-2024 Discuz! Team.