Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查(可能)中文字符串中的无效字符_C++_Unicode - Fatal编程技术网

C++ 检查(可能)中文字符串中的无效字符

C++ 检查(可能)中文字符串中的无效字符,c++,unicode,C++,Unicode,因此,我在一个大型代码库中有一个函数,用于检查无效字符,如下所示: validateMe(std::string myString) { for (int i = 0; i < myString.length(); i++) { if ((myString[i] == 0x7E) || ...) { return NOT_VALID_STRING; } } return VALID_STRING; } 我猜汉字的第一个字节是

因此,我在一个大型代码库中有一个函数,用于检查无效字符,如下所示:

validateMe(std::string myString)
{
  for (int i = 0; i < myString.length(); i++)
  {      
    if ((myString[i] == 0x7E) || ...)
    {
      return NOT_VALID_STRING;
    }
  }
  return VALID_STRING;
}
我猜汉字的第一个字节是0x7E,所以无法使用汉字。至少是我试过的那些

那么,如何检查可以用中文书写的字符串中的无效字符呢?让我们假设中国EUC-CN

编辑:

validateMetestme应该通过

我不应该通过考试


当用户输入字符时啊是的发 也就是说,通过GUI,中文EUC-CN中asdf中每个字母的第一个字符,功能失败。事实上,它会找到~或0x7E。VS调试器确实将输入翻译为åæèèèèèèèèèèèèèèèèèèèè232。相反,您可以使用std::wstring。

我读到std::string应该能够处理这个问题,您在哪里读到的std::string知道什么是Unicode,更不用说能够进行代码点操作了?字符串存储字符数组;就这样,我不明白你想验证什么。您能否演示验证函数应该失败的字符串类型?您应该给出您认为代码失败的具体示例。鉴于0x7E没有高位集,据我所知,它应该始终是UTF-8中单字节字符的一部分。写的时候,你的问题很差,因为我们不知道你认为什么是失败,它甚至没有一个失败的例子。@柯西调试器显示UTF-8编码的字符串被解码为代码页1252,我猜。调试器中的错误解码会导致√字符,但与~字符不同。字符串的UTF-8编码为\xe5\x95\x8a\xe6\x98\xaf\xe7\x9a\x84。其中没有\x7e~。std::string存储字符数组。char可以容纳任何UTF-8代码单元。因此,您可以将任何字符串解释为UTF-8,并针对UTF-8使用/操作它。
myString.find("~") != std::string::npos