数字形状

阿拉伯语和许多其他语言对数字具有经典形状,这些数字不同于计算机上最常用的传统西方数字。 为了避免命名这些形状时出现歧义,本文档使用 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+0039 打印数字 U+0030。 LOCALE_IDIGITSUBSTITUTION 常量控制此作。

单个函数的数字整形

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

标志 使用的位数
ETO_NUMERICSLATIN 欧洲数字 ExtTextOut
ETO_NUMERICSLOCAL 适合区域设置的数字 ExtTextOut
GCP_NUMERICSLATIN 欧洲数字 GetCharacterPlacement
GCP_NUMERICSLOCAL 适合区域设置的数字 GetCharacterPlacement
GCPCLASS_LATINNUMBER 欧洲数字 GCP_RESULTS
GCPCLASS_LOCALNUMBER 适合区域设置的数字 GCP_RESULTS

 

关于国家语言支持

GetLocaleInfo

GetLocaleInfoEx