C++ 任何Microsoft库是否使用Windows SBCS代码页中的非拉丁数字来表示C字符串中的数字数据?

C++ 任何Microsoft库是否使用Windows SBCS代码页中的非拉丁数字来表示C字符串中的数字数据?,c++,character-encoding,codepages,data-conversion,C++,Character Encoding,Codepages,Data Conversion,我正在尝试为“文本”文件编写一个解析器,我知道这些文件将被编码在一个。这些文件包含基本数据类型的文本表示,至少可以说,我对这些表示缺乏规范 我注意到在结尾附近有十个不显眼的小字符,它们叫做泰国数字零到泰国数字九 我试图编写一个非常健壮的解析器,但是我在暗中工作,因为有很多不同的程序可以生成这些数据文件,而我没有访问源代码的权限 < >我想知道:微软C++库中的任何函数都将实数数据类型转换为 STD::String < /Cube >或 char const */COD>(即序列化),它包含非<

我正在尝试为“文本”文件编写一个解析器,我知道这些文件将被编码在一个。这些文件包含基本数据类型的文本表示,至少可以说,我对这些表示缺乏规范

我注意到在结尾附近有十个不显眼的小字符,它们叫做
泰国数字零
泰国数字九

我试图编写一个非常健壮的解析器,但是我在暗中工作,因为有很多不同的程序可以生成这些数据文件,而我没有访问源代码的权限

< >我想知道:<强>微软C++库中的任何函数都将实数数据类型转换为<代码> STD::String < /Cube >或<代码> char const */COD>(即序列化),它包含非< /强> > /p>

我不使用微软C++库,所以不能特别引用任何一个例子,但是一个虚构的例子可以是<代码> cha[cons***整数函数::ToString(int i i)< /c> > /p>< p>排序的逆答案,但是似乎表明微软的运行库在理解了不少(但不是全部)。当你做你想做的事情时,比如把一个字符串解析成一个数字

泰语也包括在内,这似乎表明在自定义代码中支持泰语也是一个好主意

为了在此处包含更多信息,链接到页面声明Microsoft的
msvcr100
运行时支持对以下字符集的数字进行解码:

  • ASCII码
  • 阿拉伯-印度语
  • 扩展阿拉伯语
  • 德瓦纳加里
  • 孟加拉语
  • 古尔木基
  • 古吉拉特邦
  • 奥里亚
  • 泰卢固
  • 卡纳达
  • 马来亚拉姆
  • 泰语
  • 老挝
  • 藏语
  • 缅甸
  • 高棉语
  • 蒙古语
  • 全宽

整个页面包含了更多的编程环境和语言(也有很多负面影响)。

这些数字当然可以由Microsoft库创建。属性
LOCALE_IDIGITSUBSTITUTION
LOCALE_SNATIVEDIGITS
确定操作系统格式化的数字是否使用本机(即非ASCII)数字。它们最初是Unicode,因为这就是Windows内部创建字符串的方式。当您使用泰国语言环境,并将Unicode转换为CP874时,将保留这些字符


演示此行为的一个简单函数是

Windows内部使用Unicode(UTF-16);几乎所有SBC和MBC支持都是通过在Unicode之间进行转换来实现的。(例外情况是非常普通的函数,如
strcpy
)。它现在有,但并不总是如此;)我的数据文件可以来自过去~15年的任何时间段。对不起,重新阅读您的答案后,您似乎回答了与我要求相反的例行程序。我更新了问题以澄清。我认为
GetNumberFormat
更适合翻译(即阿拉伯数字
string
转换为非阿拉伯数字
string
)是否正确?因此,有理由假设没有人会对文件中不需要手动修改的数据类型进行序列化?我基本上是在预测我可能会遇到什么样的数字表示;i、 e.您可以使用它来检查
“42.7”
在泰语数字中的外观。将42.7格式化为字符串供人使用(即使用用户的区域设置)的任何其他Windows函数也将应用区域设置_IDIGITSUBSTITUTION和区域设置_SNATIVEDIGITS。确认/忽略区域设置有哪些选项:无、设置一次或每次调用?取决于函数。总是有一个用户区域设置,但有些函数忽略它(特别是在内核中-没有用户上下文),有些函数使用默认值,有些函数允许您传递它。