Code Page 历史

1. Code Page 历史发展

此技术的使用最早追溯到 MS-DOS3.3(1987 年 4 月发行)向 IBMPC 用户引进了内码表的概念,Windows 也使用此概念。

最初的 IBM 字元集被称作内码表 437,或者(MS-DOSLatinUS)。内码表 850 就是「MS-DOSLatin1」,它用附加的带重音字母(但不是 Latin1ISO/ANSI 标准)代替了一些线形字符。其他内码表被其他语言定义。最低的 128 个代码总是相同的;较高的 128 个代码取决于定义内码表的语言。

在 MS-DOS 中,如果用户为 PC 的键盘、显示卡和打印机指定了一个内码表,然后在 PC 上创建、编辑和打印文件,一切都很正常,每件事都会保持一致。然而,如果用户试图与使用不同内码表的用户交换文件,或者在机器上改变内码表,就会产生问题。字符码与错误的字符相关联。应用程序能够将内码表信息与文件一起保存来试图减少问题的产生,但该策略包括了某些在内码表间转换的工作。

虽然内码表最初仅提供了不包括带重音符号字母的附加拉丁字符集,但最终内码表的较高的 128 个字符还是包括了完整的非拉丁字母,例如希伯来语、希腊语和斯拉夫语。自然,如此多样会导致内码表变得混乱;如果少数带重音的字母未正确显示,那么整个文字便会混乱不堪而不可阅读。

内码表的扩展正是基于所有这些原因,但是还不够。斯拉夫语的 MS-DOS 内码表 855 与斯拉夫语的 Windows 内码表 1251 以及斯拉夫语的 Macintosh 内码表 10007 不同。每个环境下的内码表都是对该环境所作的标准字符集修正。IBMOS/2 也支持多种 EBCDIC 内码表。

字符内码 (character code)

字符内码 (character code) 指的是用来代表字符的内码。在输入和存储文档时都要使用内码,内码分为单字节内码和双字节内码。

单字节内码 – Single-Byte character sets (SBCS), 可以支持 256 个字符编码。
双字节内码 – Double-Byte character sets) (DBCS), 可以支持 65000 个字符编码,主要用来对大字符集的东方文字进行编码。

Code Page

Code Page 是一个经过挑选的以特定顺序排列的字符内码列表(内码表)。对于早期的单字节内码的语种,Code Page 中的内码顺序使得系统可以按照此列表来根据键盘的输入值给出一个对应的内码。对于双字节内码,则给出的是 MultiByte 到 Unicode 的对应表,这样就可以把以 Unicode 形式存放的字符转化为相应的字符内码。

在 1980 年前,仍然没有任何国际标准如 ISO-8859 或 Unicode 来定义如何扩展 US-ASCII 编码以便非英语国家的用户使用。很多 IT 厂商发明了他们自己的编码,并且使用了难以记忆的数目来标识。

1.1 CJK

Code Page

同 Extended Unix Coding ( EUC ) 编码大不一样的是,下面所有的远东 Code Page 都利用了 C1 控制码(=80…=9F)做为首字节,使用 ASCII 值(=40…=7E)做为第二字节,这样才能包含多达数万个双字节字符,这表明在这种编码之中小于 3F 的 ASCII 值不一定代表 ASCII 字符。

C1 控制码范围(=80…=9F):用作远东编码中的首字节,不同于传统的 ASCII 字符。
ASCII 值范围(=40…=7E):被用作远东编码的第二字节.
小于 3F 的 ASCII 值指的是 ASCII 编码中十进制数值小于63(十六进制表示为 3F )的字符。
该设计使得这些编码能够支持更多字符,包括汉字等双字节字符,以确保能够在远东地区的编码系统中有效地表示和处理大量的字符集,远远超出了传统 ASCII 字符集的限制。

CP932

Shift-JIS 包含日本语 charset JIS X 0201 (每个字符一个字节) 和 JIS X 0208 (每个字符两个字节),所以 JIS X 0201 平假名包含一个字节半宽的字符,其剩馀的 60 个字节被用做 7076 个汉字以及 648 个其他全宽字符的首字节。同 EUC-JP 编码区别的是,Shift-JIS 没有包含 JIS X 202 中定义的 5802 个汉字。

CP936

GBK 扩展了 EUC-CN 编码 ( GB 2312-80 编码,包含 6763 个汉字) 到 Unicode (GB13000.1-93) 中定义的 20902 个汉字,中国大陆使用的是简体中文 zh_CN.。

CP949

UnifiedHangul (UHC) 是韩文 EUC-KR 编码 (KS C 5601-1992 编码,包括 2350 韩文音节和 4888 个汉字 a) 的超集,包含 8822 个附加的韩文音节 ( 在 C1 中 )。

CP950

代替 EUC-TW (CNS 11643-1992) 的 Big5 编码 (13072 繁体 zh_TW 中文字) 繁体中文,这些定义都在 Ken Lunde 的 CJK.INF 中或者 Unicode 编码表中找到。

Microsoft 采用了以上四种 Code Page,因此在访问Microsoft的文件系统时,需要根据文件中包含的具体语言文本选择适合的 Code Page,以确保文本能够正确地显示和处理。。

1.2 IBM 的远东语言 Codepage

IBM 的 Codepage 分为 SBCS 和 DBCS 两种:
IBM SBCS Codepage
37 (英文) *
290 (日文) *
833 (韩文) *
836 (简体中文) *
891 (韩文)
897 (日文)
903 (简体中文)
904 (繁体中文)
IBM DBCS Codepage
300 (日文) *
301 (日文)
834 (韩文) *
835 (繁体中文) *
837 (简体中文) *
926 (韩文)
927 (繁体中文)
928 (简体中文)
将 SBCS 的 Codepage 和 DBCS 的 Codepage 混合起来就成为: IBM MBCS Codepage
930 (日文) (Codepage 300 加 290) *
932 (日文) (Codepage 301 加 897)
933 (韩文) (Codepage 834 加 833) *
934 (韩文) (Codepage 926 加 891)
938 (繁体中文) (Codepage 927 加 904)
936 (简体中文) (Codepage 928 加 903)
5031 (简体中文) (Codepage 837 加 836) *
5033 (繁体中文) (Codepage 835 加 37) *

* 代表采用 EBCDIC 编码格式
由此可见,Mircosoft 的 CJK Codepage 来源于 IBM 的 Codepage.

2. Linux 下 Codepage 的作用

在 Linux 下引入对 Codepage 的支持主要是为了访问 FAT/VFAT/FAT32/NTFS/NCPFS 等文件系统下的多语种文件名的问题。

目前在 NTFS 和 FAT32/VFAT 下的文件系统上都使用了 Unicode, 这就需要系统在读取这些文件名时动态将其转换为相应的语言编码,因此引入了 NLS(National Language Support)支持。

其相应的程序文件在 /usr/src/linux/fs/nls 下:

Config.in
Makefile
nls_base.c
nls_cp437.c
nls_cp737.c
nls_cp775.c
nls_cp850.c
nls_cp852.c
nls_cp855.c
nls_cp857.c
nls_cp860.c
nls_cp861.c
nls_cp862.c
nls_cp863.c
nls_cp864.c
nls_cp865.c
nls_cp866.c
nls_cp869.c
nls_cp874.c
nls_cp936.c
nls_cp950.c
nls_iso8859-1.c
nls_iso8859-15.c
nls_iso8859-2.c
nls_iso8859-3.c
nls_iso8859-4.c
nls_iso8859-5.c
nls_iso8859-6.c
nls_iso8859-7.c
nls_iso8859-8.c
nls_iso8859-9.c
nls_koi8-r.c
实现了下列函数:
extern int utf8_mbtowc (__u16 *, const __u8 *, int);
extern int utf8_mbstowcs (__u16 *, const __u8 *, int);
extern int utf8_wctomb (__u8 *, __u16, int);
extern int utf8_wcstombs (__u8 *, const __u16 *, int);
这样在加载相应的文件系统时就可以用下面的参数来设置 Codepage:
对于 Codepage 437 来说
mount -t vfat /dev/hda1 /mnt/1 -o codepage=437,iocharset=cp437
这样在 Linux 下就可以正常访问不同语种的长文件名了.

3. Linux 下支持的 Codepage

nls codepage 437 – 美国 / 加拿大英语
nls codepage 737 – 希腊语
nls codepage 775 – 波罗的海语
nls codepage 850 – 包括西欧语种 (德语,西班牙语,意大利语) 中的一些字符
nls codepage 852 – Latin 2 包括中东欧语种 (阿尔巴尼亚语,克罗地亚语,捷克语,英语,芬兰语,匈牙利语,爱尔兰语,德语,波兰语,罗马利亚语,塞尔维亚语,斯洛伐克语,斯洛文尼亚语,Sorbian 语)
nls codepage 855 – 斯拉夫语
nls codepage 857 – 土耳其语
nls codepage 860 – 葡萄牙语
nls codepage 861 – 冰岛语
nls codepage 862 – 希伯来语
nls codepage 863 – 加拿大语
nls codepage 864 – 阿拉伯语
nls codepage 865 – 日尔曼语系
nls codepage 866 – 斯拉夫语 / 俄语
nls codepage 869 – 希腊语 (2)
nls codepage 874 – 泰语
nls codepage 936 – 简体中文 GBK
nls codepage 950 – 繁体中文 Big5
nls iso8859-1 – 西欧语系 (阿尔巴尼亚语,西班牙加泰罗尼亚语,丹麦语,荷兰语,英语,Faeroese 语,芬兰语,法语,德语,加里西亚语,爱尔兰语,冰岛语,意大利语,挪威语,葡萄牙语,瑞士语.) 这同时适用于美国英语.
nls iso8859-2 – Latin 2 字符集,斯拉夫 / 中欧语系 (捷克语,德语,匈牙利语,波兰语,罗马尼亚语,克罗地亚语,斯洛伐克语,斯洛文尼亚语)
nls iso8859-3 – Latin 3 字符集,(世界语,加里西亚语,马耳他语,土耳其语)
nls iso8859-4 – Latin 4 字符集,(爱莎尼亚语,拉脱维亚语,立陶宛语), 是 Latin 6 字符集的前序标准
nls iso8859-5 – 斯拉夫语系 (保加利亚语,Byelorussian 语,马其顿语,俄语,塞尔维亚语,乌克兰语) 一般推荐使用 KOI8-R codepage
nls iso8859-6 – 阿拉伯语.
nls iso8859-7 – 现代希腊语
nls iso8859-8 – 希伯来语
nls iso8859-9 – Latin 5 字符集,(去掉了 Latin 1 中不经常使用的一些冰岛语字符而代以土耳其语字符)
nls iso8859-10 – Latin 6 字符集,(因纽特 (格陵兰) 语,萨摩斯岛语等 Latin 4 中没有包括的北欧语种)
nls iso8859-15 – Latin 9 字符集,是 Latin 1 字符集的更新版本,去掉一些不常用的字符,增加了对爱莎尼亚语的支持,修正了法语和芬兰语部份,增加了欧元字符)
nls koi8-r – 俄语的缺省支持

ASP 和 SAP 中的 Code Page 区别

ASP 中

CodePage 的作用,是决定页面以何种编码方式显示动态内容。当页面被服务器处理之后,页面将以 CodePage 设定的编码输出到客户端。当然,CodePage 的参数需正确,否则,将产生错误信息 “CodePage 值无效。指定的 CodePage 值无效。”(事件 ID: 0204)。如果 CodePage 没有设置,则服务器使用默认的 CodePage 加载到你的 Session 里面,使用程序代码:Response.Write (Session.CodePage) 可以查看你当前使用的 CodePage。

LANGUAGE=“VBSCRIPT” 和 LANGUAGE=“javascript”,申明 ASP 当前使用的编程脚本分别为 VBSCRIPT 和 javascript。一般在程序第一行进行申明。当使用该脚本申明后,以下所有程序运用全得符合该脚本语言的所有语法,两者不能混淆 使用,否则出错。我们在写 ASP 时,一般不做限定,因为经常会在一 ASP 页面写不同的脚本,当然这也是以牺牲执行效率为代价的。

CodePage:可读 / 可写。整型。定义用于在浏览器中显示页内容的代码页。代码页是字符集的数字值,不同的语言使用不同的代码页。例 如,ANSI 代码页为 1252,日文代码页为 932,简体中文代码页为 936。一般情况下,当你上传到国外网页空间,或者提取数据库记录等出现乱码时,就 采用这种方法解决。

SAP 中

最经常使用的读取数据的方法就是使用 GUI_UPLOAD 这个 FM( Function Module,函数模块),其中有个 CODEPAGE, 是用来指定代码页的。

Siebel ValueSAP 代码页描述
CP12521100SAP 拉丁语 - 1 - ISO8859-1 - 代码页
ISO-8859-21402SAP 拉丁语 - 2 - ISO8859-2
ISO-8859-51500SAP 西里尔文 - ISO8859-5
CP12541610SAP 土耳其语 - ISO8859-9
CP12531700SAP 希腊语 - ISO8859-7 - 不完全匹配
CP12551800SAP 希伯来语 - ISO8859-8 - 不完全匹配
CP9328000SAP Shift-JIS
CP9508300SAP 繁体中文
CP9368400SAP 简体中文
CP9498500SAP 韩文
CP8748600SAP 泰文

OEM (IBM PC) 代码页

  • 437 — 最初的 IBM PC 代码页,实现了扩展 ASCII 字符集
  • 737 — 希腊语
  • 850 —“多语言 (Latin-1)” (西欧语言)
  • 852 —“斯拉夫 (Latin-2)” (中欧及东欧语言)
  • 855 — 西里尔 (Cyril) 字母
  • 857 — 土耳其语
  • 858 — 带欧元符号的 “多语言”
  • 860 — 葡萄牙语
  • 861 — 冰岛语
  • 863 — 法语加拿大英语
  • 865 — 北欧
  • 866 — 西里尔 (Cyril) 字母
  • 869 — 希腊语

代码页 819 实现了拉丁语 (Latin-1)(ISO/IEC 8859-1),用于 IBM AS/400 小型机。

中日韩语言代码页

既是 OEM 代码页,也是 Windows 代码页。

  • 932 — 日 文 (shift_jis)
  • 936 — 简体中文(GBK)
  • 949 — 韩文
  • 950 — 繁体中文(大五码)

其他代码页

  • 10000 — Macintosh Roman encoding (followed by several other Mac character sets)
  • 10007 — Macintosh Cyrillic encoding
  • 10029 — Macintosh Central European encoding
  • 1200 — UCS-2LE Unicode 小端序 (BMP 的 ISO 10646, UTF-16LE )
  • 1201 — UCS-2BE Unicode 大端序 (unicodeFFFE)
  • 65000 — UTF-7 Unicode
  • 65001 — UTF-8 Unicode

Windows (ANSI) 代码页

  • 874 — 泰文字母
  • 1250 — 东欧拉丁字母
  • 1251 — 古斯拉夫语
  • 1252 — 西欧拉丁字母 ISO-8859-1.
  • 1253 — 希腊语
  • 1254 — 土耳其语
  • 1255 — 希伯来语
  • 1256 — 阿拉伯语
  • 1257 — 巴尔
  • 1258 — 越南
  • 1254 — 土耳其语

Windows-1252 与 ISO-8859-1 并不完全一致。ISO-8859-1 在 0x80-0x9F 范围的控制字符,在 Windows-1252 中被可打印字符取代。由于在 web 网页中,ASCII 控制字符不起作用,所以网页一般用 Windows-1252 代码页标记替代 ISO-8859-1 标记。

Code Page 和 Unicode 的区别

Code Page 和 Unicode 是处理全球语言字符的两种解决方案,但其工作原理和特性有所不同。

Unicode 为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。而 Code Page 采取重复的编号,根据不同的 Code Page 来决定一个编号是什么字符。同一个编号在不同的 Code Page 下代表不同的字符。

Unicode

  • 为每个语言中的每个字符提供了唯一的二进制编码,确保字符在不同系统和平台上的一致性和互操作性。
  • 成为跨语言、跨平台进行文本处理和转换的标准选择。
  • 是一个通用的字符编码标准,为每个字符分配了唯一的代码点(code point),以满足跨语言、跨平台进行文本转换和处理的要求。

Code Page

  • 是一种早期的字符编码方案,使用不同的编号来映射字符集中的字符。
  • 每个 Code Page 都有自己的编号表,相同的编号在不同的 Code Page 下可以代表不同的字符。
  • 通常用于早期的操作系统和应用程序中,局限于特定语言或区域,并不具备跨语言互操作性。
  • 存在很多限制和问题,例如字符集不够完整、编码不够统一、跨平台和跨语言转换困难等。

在实际应用中,特别是在多语言环境下,Unicode 的使用已经成为主流,因为它提供了更广泛的字符覆盖范围和更高的兼容性。

Via: 网络整理 暂记 待修订

Code Page Identifiers - Win32 apps | Microsoft Learn
https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers?redirectedfrom=MSDN

Windows code page - Wikipedia
https://en.wikipedia.org/wiki/Windows_code_page

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1961 Springboot自习室预约系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 自习室预约管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库…

大型企业组网如何规划网络

大型企业组网是一个复杂的过程,它需要细致的规划和设计,以确保网络能够满足企业的业务需求,同时保证性能、安全性和可扩展性。以下是规划大型企业网络的一些关键步骤和考虑因素: 1. 需求分析 业务需求:与各个业务部门…

EWM学习之旅-1-EWM100

系统学习一个业务模块已经变得越来越重要,开始吧,EWM! EWM的Learning Journey中包括7本 ebook,100/110/115/120/125/130/140,一本一本的啃吧,相信很多内容是重复的。 EWM100很适合初学者,了解概念术语&…

Lesson 40 What are you going to do?

Lesson 40 What are you going to do? 词汇 show v. 展示,展出 搭配:show人东西    show东西to人 口语:Show me your hands! 拿出来! n. 秀,表演 搭配:talk show 脱口秀    show room 展厅 take v…

高级同步机制:Phaser与CountDownLatch详解

在Java并发编程中,同步机制是确保多线程环境下数据一致性和程序正确性的关键。Java提供了多种同步工具,其中Phaser和CountDownLatch是两个强大的工具,它们可以帮助我们更好地控制线程的执行顺序和同步。 1. CountDownLatch CountDownLatch是…

BPF:BCC工具 funccount 统计内核函数调用(内核函数、跟踪点USDT探针)认知

写在前面 博文内容涉及BCC工具 funccount 认知funccount 可以帮助用户追踪和分析Linux系统上特定函数、系统探针或USDT探针的运行次数。这对于性能分析、故障排查和系统优化等场景非常有用。理解不足小伙伴帮忙指正 😃,生活加油 不必太纠结于当下,也不必…

byte[]、MultipartFile、File转换

需求背景 当你需要将byte[]、MultipartFile、File实现互转时,无外乎以下场景: 保存第三方接口返回二进制流 前/后端文件流上传 微服务间调用 文件格式转换 byte[]转MultipartFile 错误示例-MockMultipartFile 首先来看一下摘自Spring官网对MockM…

精益生产推进时如何营造持续变革的氛围?

在快速变化的市场环境中,企业如何保持竞争力?精益生产无疑为众多企业提供了一个强大的战略工具。但是,单纯的引入精益生产理念和方法并不能保证企业的持续成功。关键在于如何营造一种持续变革的氛围,让精益生产成为推动企业不断前…

SDN控制器有哪些推荐品牌?

SDN控制器是SDN架构中的核心组件,负责管理网络设备并实现网络策略。随着SDN技术的不断发展,市场上出现了多种SDN控制器,它们来自不同的供应商,各有特色。以下是一些知名的SDN控制器品牌和产品: 1. **OpenDaylight**&a…

智慧校园-宿舍管理系统总体概述

在教育信息化的不断推动下,智慧校园宿舍管理系统脱颖而出,它以一种全新的视角和方式,重塑了高校宿舍管理的传统模式。该系统深度融合了云计算、物联网、大数据等先进科技,旨在为学生提供一个既安全可靠又充满便捷与温馨的居住体验…

Node.js全栈指南:认识MIME和HTTP

MIME,全称 “多用途互联网邮件扩展类型”。 这名称相当学术,用人话来说就是: 我们浏览一个网页的时候,之所以能看到 html 文件展示成网页,图片可以正常显示,css 样式能正常影响网页效果,js 脚…

Arduino - 电磁锁

Arduino - Electromagnetic Lock Arduino - 电磁锁 The electromagnetic lock (EM lock) is widely used to lock the door. It is usually used with switch, fingerprint reader, RFID/NFC reader, keypad, or application on PC/mobille to control access to door, buid…

气膜体育馆对高度的要求—轻空间

在现代体育场馆的建设中,气膜体育馆以其独特的优势,逐渐成为人们关注的焦点。不同于传统的钢筋混凝土结构,气膜体育馆以其轻盈、灵活、环保的特点,为人们带来了全新的体育体验。在设计与建设气膜体育馆时,高度是一个关…

爬虫是什么?

目录 1.什么是互联网爬虫? 2.爬虫核心? 3.爬虫的用途? 4.爬虫分类? 5.反爬手段? 1.什么是互联网爬虫? 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序…

Hadoop简单应用程序实例

Hadoop是一个分布式系统基础架构,主要用于大数据的存储和处理。它允许使用简单的编程模型跨集群处理和生成大数据集。Hadoop主要由HDFS(Hadoop Distributed FileSystem,分布式文件系统)和MapReduce编程模型两部分组成。 准备工作…

第十节 动态面板实现推动和拉动效果

在原型设计中我们经常会遇到元件使用显示更多或者收起效果,下面以面板元件推动与拉动效果做案件说明。 一、设置原有内容 我这里添加一个表格内容,添加“显示更多”文本超链接 二、设置在更多显示面板内容 添加一个动态面板,设置有内容、无内容两个状态 在有内容面板中添…

WDF驱动开发-WDF总线枚举

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线…

TEMU半托管模式引领跨境电商新风尚

TEMU半托管模式作为2024年的热门话题,正吸引着越来越多卖家的目光。继全托管模式取得巨大成功之后,半托管模式的推出无疑为跨境电商行业注入了新的活力。 在选品方向上,TEMU半托管模式强调商品的聚焦与精选。卖家在选择上架商品时&#xff0c…

python AI全栈工程师

python AI全栈工程师 前端:Streamlit Streamlit是一个开源的Python库,专为数据科学家和机器学习工程师设计,用于快速构建交互式用户界面。Streamlit功能强大、易于使用,特别适合数据科学家和机器学习工程师快速构建和部署交互式数…

在项目中使用 VitePress 作为文档常见问题:样式丢失,图标丢失,打包错误,中文配置修改等

本文总结和记录自己在使用 vitepress 作为 Vue 项目文档时遇到的问题,以及解决方法。直接进入正题: md 文档中引入组件部分样式丢失 默认你导入的 vue 文件的 style 标签里的样式会生效,但是样式之外的样式不会生效,需要手动引入…