转: isspace 函数中文报错
2012-06-15 13:23 youxin 阅读(1100) 评论(0) 编辑 收藏 举报当用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 的本地化路径的问题是一样的.