在键盘上键入 ALT + 251 和 ALT + 0251 会产生不同的字符输入
Typing ALT + 251 and ALT + 0251 at the keyboard produce different character entries
在Windows中:
- 当我按下 Alt + 251,我得到一个
√
个字符
- 当我按下 Alt + 0251得到
û
个字符!
前导零没有价值。
实际上,我想从 Client Report Definition
(RDLC) 中的 Chr(251)
函数获取复选标记 (√
),但它让我 û
!
我认为它将四个数字解释为十六进制而不是十进制。
正如您所理解的,+0251 是 ASCII character,它不代表一个数字。
你必须明白,当你在数字左边写0时,它没有任何值,但这里是ASCII码而不是数字。
使用前导零强制 Windows 解释 Windows-1252 集中的代码。如果没有 0,则使用 OEM 集解释代码。
Alt+251 :
Alt+025 1:
- 我们俩都会得到
û
,因为我们将使用 Windows-1252,其中 251 代表 u-circumflex。
这是历史。
从 ASCII 到 Unicode
在 DOS/Windows 开头,字符是一个字节宽并且来自美国字母表,使用 ASCII 编码设置转换。
一旦 PC 在美国以外地区使用,就需要额外的字符(例如,许多语言使用重音符号)。所以设计了不同的codepages,使用不同的编码table进行转换。
但是美国的计算机不会使用与西班牙相同的代码页。这需要用户和程序员假定当前活动的代码页,这是计算史上的一个伟大时期...
同时确定仅使用一个字节是不行的,同时需要超过 256 个字符可用。不同的编码系统由一个联盟设计,统称为 Unicode.
在Unicode中"characters"可以是一到四个字节宽,同一个字符串中一个字符的字节数可能会有所不同。
引入了其他概念,例如codepoint and glyph来处理书面语言的复杂性。
虽然 Unicode 被采纳为标准,但 Windows 保留了旧的单字节代码页以提高效率、简单性和追溯兼容性。 Windows 还添加了代码页来处理仅在 Unicode 中发现的字形。
Windows 有:
- 欧洲的默认 OEM codepage which is usually 437 in the US -- your case -- or 850 -- 我的情况 -- 与命令行一起使用 ("DOS"),
- Windows-1252 codepage(又名 Latin-1 和 ISO 8859-1,但这是误用)以缓解转换 to/from Unicode。当前的趋势是用 Unicode 替换所有此类 extended 代码页。 Java 设计师做出了一个大胆的决定,只使用 Unicode 来表示字符串。
当使用 Alt 方法输入字符时,您需要告诉 Windows 您要使用哪个代码页来解释它:
- 无前导零:您希望使用 OEM 代码页。
- 前导零:您希望使用 Windows 代码页。
关于 OEM 代码页的注释
OEM 代码页之所以这样称呼,是因为第一台 PC/PC-Compatible 计算机的字符显示是 hard-wired,而不是软件完成的。计算机在 ROM 中有一个带有固定编码和图形定义的字符生成器。 BIOS 会向生成器发送一个字节和一个位置(行,行中的位置),生成器会在该位置绘制相应的字形。这在当时被命名为"text-mode"。
在美国销售的计算机与在德国销售的计算机具有不同的字符 ROM。这实际上取决于制造商,BIOS 能够读取已安装代码页的值。
后来字形的生成基于软件,以处理无限的字体、样式和大小。可以在 OS 级别定义一组字形及其相应的编码 table。这种组合可以在任何计算机上使用,独立于安装的 OEM 生成器。
软件生成的字形从 VGA 显示适配器开始,code required for the drawing of glyphs 是 VGA 驱动程序的一部分。
在Windows中:
- 当我按下 Alt + 251,我得到一个
√
个字符 - 当我按下 Alt + 0251得到
û
个字符!
前导零没有价值。
实际上,我想从 Client Report Definition
(RDLC) 中的 Chr(251)
函数获取复选标记 (√
),但它让我 û
!
我认为它将四个数字解释为十六进制而不是十进制。
正如您所理解的,+0251 是 ASCII character,它不代表一个数字。
你必须明白,当你在数字左边写0时,它没有任何值,但这里是ASCII码而不是数字。
使用前导零强制 Windows 解释 Windows-1252 集中的代码。如果没有 0,则使用 OEM 集解释代码。
Alt+251 :
Alt+025 1:
- 我们俩都会得到
û
,因为我们将使用 Windows-1252,其中 251 代表 u-circumflex。
这是历史。
从 ASCII 到 Unicode
在 DOS/Windows 开头,字符是一个字节宽并且来自美国字母表,使用 ASCII 编码设置转换。
一旦 PC 在美国以外地区使用,就需要额外的字符(例如,许多语言使用重音符号)。所以设计了不同的codepages,使用不同的编码table进行转换。
但是美国的计算机不会使用与西班牙相同的代码页。这需要用户和程序员假定当前活动的代码页,这是计算史上的一个伟大时期...
同时确定仅使用一个字节是不行的,同时需要超过 256 个字符可用。不同的编码系统由一个联盟设计,统称为 Unicode.
在Unicode中"characters"可以是一到四个字节宽,同一个字符串中一个字符的字节数可能会有所不同。
引入了其他概念,例如codepoint and glyph来处理书面语言的复杂性。
虽然 Unicode 被采纳为标准,但 Windows 保留了旧的单字节代码页以提高效率、简单性和追溯兼容性。 Windows 还添加了代码页来处理仅在 Unicode 中发现的字形。
Windows 有:
- 欧洲的默认 OEM codepage which is usually 437 in the US -- your case -- or 850 -- 我的情况 -- 与命令行一起使用 ("DOS"),
- Windows-1252 codepage(又名 Latin-1 和 ISO 8859-1,但这是误用)以缓解转换 to/from Unicode。当前的趋势是用 Unicode 替换所有此类 extended 代码页。 Java 设计师做出了一个大胆的决定,只使用 Unicode 来表示字符串。
当使用 Alt 方法输入字符时,您需要告诉 Windows 您要使用哪个代码页来解释它:
- 无前导零:您希望使用 OEM 代码页。
- 前导零:您希望使用 Windows 代码页。
关于 OEM 代码页的注释
OEM 代码页之所以这样称呼,是因为第一台 PC/PC-Compatible 计算机的字符显示是 hard-wired,而不是软件完成的。计算机在 ROM 中有一个带有固定编码和图形定义的字符生成器。 BIOS 会向生成器发送一个字节和一个位置(行,行中的位置),生成器会在该位置绘制相应的字形。这在当时被命名为"text-mode"。
在美国销售的计算机与在德国销售的计算机具有不同的字符 ROM。这实际上取决于制造商,BIOS 能够读取已安装代码页的值。
后来字形的生成基于软件,以处理无限的字体、样式和大小。可以在 OS 级别定义一组字形及其相应的编码 table。这种组合可以在任何计算机上使用,独立于安装的 OEM 生成器。
软件生成的字形从 VGA 显示适配器开始,code required for the drawing of glyphs 是 VGA 驱动程序的一部分。