检测字符串中的Unicode字符

时间:2014-04-15 11:49:30

标签: c++ visual-c++

我有字符串输入。我想检查所有字符并提示用户输入字符串中是否有任何Unicode字符。

如何在C ++中进行此验证。

例如。在记事本中,如果输入任何Unicode字符并尝试使用ANSI编码保存它,它将提示有关Unicode字符。我想做类似的验证。

3 个答案:

答案 0 :(得分:2)

您可以使用IsTextUnicode函数。据我所知,这是记事本使用的功能。

MSDN链路: http://msdn.microsoft.com/en-us/library/windows/desktop/dd318672%28v=vs.85%29.aspx

只需插入NULL作为最后一个参数。

#include <string>
#include <Windows.h>

int main()
{
  std::string s = "Hallo!";
  std::wstring ws = L"Hello!";

  if (::IsTextUnicode(ws.c_str(), ws.length(), NULL) == 1)
  {
    // is unicode
    int i = 0;
  }
  else
  {
    // no unicode
    int i = 1;
  }

  return 0;
}

答案 1 :(得分:1)

一种简单的方法是允许Unicode并将文本存储为UTF-8。由于UTF-8是ASCII的超集,因此很容易找到不是ASCII的字符(它们具有高位设置)。

答案 2 :(得分:0)

Notepad警告您的情况略有不同:它会警告您无法转换为所需代码页的Unicode字符。 IOW,WideCharToMultiByte(CP_ACP, ..., &lpUsedDefaultChar)导致lpUsedDefaultChar设置为TRUE。

CP_ACP替换为您想要的编码,但CP_UTF8除外,这是没有意义的。 UTF8支持所有Unicode字符。