You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从RFC 5646格式区域设置字符串中解析国家代码?

从RFC5646格式区域名中提取国家代码

要从GetUserDefaultLocaleName返回的RFC5646格式字符串里提取国家代码,核心是掌握RFC5646语言标签的结构规则:

RFC5646的语言标签由多个连字符分隔的子标签组成,顺序为:语言代码(必填)→ 脚本代码(可选)→ 地区(国家/地区)代码(可选)→ 变体(可选)→ 扩展/私有部分(可选)。

国家代码的识别规则

国家代码属于「地区子标签」,具备以下特征:

  • 格式为2个大写字母(符合ISO 3166-1 alpha-2标准,Win32返回的结果基本都是这种),或3个大写字母(ISO 3166-1 alpha-3);
  • 位置上,它的前一个子标签要么是语言代码(2-3个小写字母,比如uz、en),要么是脚本代码(4个字符,首字母大写其余小写,比如Latn、Hans);
  • 要排除变体、扩展、私有部分:变体通常是5个以上字母/数字组合,扩展以-x-开头,私有部分格式无固定但不会符合国家代码的短大写字母特征。

实际案例解析

  • 对于uz-Latn-UZ:分割后得到["uz", "Latn", "UZ"],UZ是2位大写字母,前一个子标签是脚本代码Latn,符合国家代码特征,因此提取UZ;
  • 对于en-US-x-custom:分割后得到["en", "US", "x", "custom"],US是2位大写字母,前一个是语言代码en,后续的x是扩展标记,因此US是国家代码;
  • 对于zh-CN:分割后["zh", "CN"],CN直接对应国家代码。

更可靠的Win32原生方法

如果不想自己解析字符串,可以直接调用GetLocaleInfoEx函数,传入GetUserDefaultLocaleName获取的区域名,指定LOCALE_SISO3166CTRYNAME参数,就能直接拿到标准的2字母国家代码,避免手动解析可能出现的错误。

内容的提问来源于stack exchange,提问作者Myria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:05:11