转: isspace 函数中文报错

  当用isspace()判断中文时,会出现  (unsigned)(c + 1) <= 256);” 错误。

 解释:  试图用locale为ASCII的isspace来判断GBK即中文编码的空格,对么?如果我理解正确的话,那么这不是VC的问题,而是使用上的问题。

   对于C++而言,应该使用isspace(ch, loc); 这个版本,loc是类型为std::locale的变量,如果你想判断GBK的空格,那么让loc是GBK的locale,然后这个函数就正常了。

你现在使用的是C的isspace(ch)函数,这个函数使用的是默认的全局locale,你把这个全局的设为GBK,也应该可以解决这个问题。总之调用locale为默认的ASCII的locale的isspace去判断编码为GBK的字串是否是空格,逻辑上不对

 解决方法是在调用本函数之前设置编码本地化,代码如下

                       std::locale::global(std::locale(""));

其实解决方法和fstream 的本地化路径的问题是一样的.

原文地址:https://www.cnblogs.com/youxin/p/2550551.html