数字形状

阿拉伯语和许多其他语言具有与计算机上最常用的传统西方数字不同的经典数字形状。 为了避免命名这些形状时出现歧义,本文档使用 Unicode 标准中的以下名称。

数字的 Unicode 名称 使用的国家/地区
欧洲数字 欧洲、美洲和许多其他国家/地区
Arabic-Indic位数 阿拉伯语国家/地区 (尽管许多使用欧洲数字)
其他国家/地区数字:索引数字、泰国数字等 不同国家/地区

 

Unicode 为每个数字形状提供单独的码位。 因此,若要访问特殊语言数字形状,应用程序可以使用上述数字(U+0030 到 U+0039)的相关 Unicode 字符代码。 这些代码始终以适当的形状显示,视字体可用性而定。

Unicode 字符代码 U+0030 到 U+0039 名义上表示欧洲数字 0 到 9,但可以更改其数字形状。 GDI 和 DirectWrite 文本 API 为应用程序提供了控制此行为的机制。 (例如,请参阅 ScriptApplyDigitSubstitutionIDWriteTextAnalysisSink::SetNumberSubstitution.) 某些 shell 控件和用户界面框架中的行为可能会响应数字替换的用户区域设置; LOCALE_IDIGITSUBSTITUTION LCTYPE 可用于获取不同区域设置的默认数字替换设置,或获取当前用户的桌面设置进行数字替换。

本机数字

本机数字是用户在控制面板的区域和语言选项部分中的 Number 属性表中选择的数字形状。 若要查找用户首选的数字表示形式,应用程序使用 GetLocaleInfoGetLocaleInfoEx 函数以及表示区域设置信息的 LOCALE_SNATIVEDIGITS 常量。

注意

通常,Unicode 数字代码是在运行时操作系统例程中生成的。 因此,必须升级常见的运行时操作系统,应用程序才能正确检查 LOCALE_SNATIVEDIGITS

 

数字替换

应用程序可以使用数字替换来告知操作系统如何打印数字 U+0030 到 U+0039。 LOCALE_IDIGITSUBSTITUTION常量控制此操作。

单个函数的数字整形

ExtTextOutGetCharacterPlacementGCP_RESULTS 函数具有标志,这些标志控制在函数调用期间 Unicode 代码 U+0030 到 U+0039 的替换。 这些标志将覆盖控制面板中的区域设置,但不重置设置。 此外,它们不会覆盖 Unicode 代码 NADS 和 NODS。 以下标志可用。

Flags 使用的数字 适用范围
ETO_NUMERICSLATIN 欧洲数字 ExtTextOut
ETO_NUMERICSLOCAL 适合区域设置的数字 ExtTextOut
GCP_NUMERICSLATIN 欧洲数字 GetCharacterPlacement
GCP_NUMERICSLOCAL 适合区域设置的数字 GetCharacterPlacement
GCPCLASS_LATINNUMBER 欧洲数字 GCP_RESULTS
GCPCLASS_LOCALNUMBER 适合区域设置的数字 GCP_RESULTS

 

关于国家语言支持

GetLocaleInfo

GetLocaleInfoEx