c++ - 如何将具有双高/双宽字符的字符串转换为普通字符串[VC++6]

标签 c++ string

我的应用程序通常会收到以下格式的字符串:
"项目 $5.69 "

我一直期待的一些内容:
- 长度总是 20 个字符
- 文本的起始索引总是 [5]
- 最重要的是价格的 DECIMAL 索引总是 [14]
为了正确识别此字符串,我验证了上面列出的所有预期内容....

我的一些客户现在已经开始发送带有双高/双宽值(代表单个可读字符的字符对)的字符串,类似于以下内容: “项目 $x80x90.x81x91x82x92”

为了测试,我只是逐个字符地扫描字符串,比较 char[i] 和 char[i+1] 并在找到匹配项时用它们对应的单个字符替换这些对(工作正常),如下所示:

[代码]

for (int i=0; i < sData.length(); i++)
{
   char ch = sData[i] & 0xFF;
   char ch2 = sData[i+1] & 0xFF;

   if (ch == '\x80' && ch2 == '\x90')
      zData.replace("\x80\x90", "0");
   else if (ch == '\x81' && ch2 == '\x91')
      zData.replace("\x81\x91", "1");
   else if (ch == '\x82' && ch2 == '\x92')
      zData.replace("\x82\x92", "2");
   ...
   ...
   ...
}

[/代码]

但是结果是这样的:
"项目 $5.69 "

注意这不再符合我的预期:由于 3 次转换,长度现在为 17(而不是 20),由于之前的“5”转换,小数点现在位于索引 13(而不是 14)小数点。

理想情况下,我想将字符串转换为正常的可读格式,将常量(长度、文本索引、小数索引)保持在同一位置(这样我的应用程序的其余部分就可以重复使用)……或者任何其他建议(我几乎坚持这个)......是否有处理这些类型字符的标准方法?

任何帮助将不胜感激,我已经坚持了一段时间......

谢谢,

最佳答案

您需要 Unicode 范式。 This Page会帮助你,尽管是关于 VS8。 NormalizeString API 独立于所使用的 Visual Studio 版本。

关于c++ - 如何将具有双高/双宽字符的字符串转换为普通字符串[VC++6],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795477/

相关文章:

C++14:你能在 constexpr 中调用 new 吗?

c++ - 动态分配的 C 字符串数组

c++ - 字符串输入大于 1000 个字符时执行挂起

python - 它是python中最简单的子串吗?

html - 使用一对 P​​erl 正则表达式匹配的无限循环

c++ - 异构可变参数非类型模板参数计数灵活吗?

c++ - 为什么我在 Apple Silicon 上编译的 native 应用程序有时构建为 arm64,有时构建为 x86_64?

c - 为什么我无法使用以下代码显示字符串?

c++ - C++输出对齐

c++ - 如何在字符串中搜索字符?