isspace 对含有中文 的字符串进行检查的时候表现不正常!?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//删除右边连续的空格,
char* rtrim(char *pstr)
{
    char *p = pstr;

    int len = strlen(pstr);
    p += len - 1;

    for(; isspace(*p) && len > 0; p--,len--)
    {
        *p = ‘\0‘; //截断
    }

    return pstr;
}

int main()
{
    char text[] = {"D:\\我的文档  "};
    printf("text:%s, length:%d\n",text,strlen(text));

    char *p = rtrim(text);

    printf("text:%s, length:%d\n",p,strlen(p));

    return 0;
}

输出结果: (为什么中文[文档]两字会输出乱码?)
---------------------------------------

text:D:\我的文档  , length:13
text:D:\我的? length:8

检查了半天,估计是isspace()的问题,不使用isspace(), 改写:

for(; (*p == ‘ ‘ || *p == ‘\t‘ || *p == ‘\n‘ || *p == ‘\r‘) && len > 0; p--,len--)
 {
        *p = ‘\0‘; //截断
}

再测试,就正常了。

输出结果: 
---------------------------------------
text:D:\我的文档  , length:13
text:D:\我的文档, length:11

续:

几天之后又意外发现,在处理 ‘字‘开头的中文时,也会出现乱码。

看来以后处理中文字符串的时候,不能用isspace()函数了,太危险了。

时间: 2024-11-05 18:34:21

isspace 对含有中文 的字符串进行检查的时候表现不正常!?的相关文章

java处理含有中文的字符串.

1. 问题描述: 原始数据是以行为单位的, 每行固定长度931个字节, 汉字占2个字节, 按照字典描述,共有96个字典,只有第32个字典为中文地址, 所以需要单独处理. 由于项目设计保密,故删除敏感数据. 供实验的数据是测试数据. 在处理过程中,按照规定的字典长度截取字符串的时候,发现处理到汉字的时候出错. 那就需要单独处理汉字. 比较麻烦. 所以写了如下简便方法, 如有更好的解决方案,还请多多交流. 如何计算含有中文的字符串长度. 2. 解决方案: 源码: package com.dk.rf;

java 判断含有中文的字符串的长度

public static boolean isLetter(char c) { int k = 0x80; return c / k == 0 ? true : false; } /** * 判断字符串是否为空 * @param str * @return */ public static boolean isNull(String str){ if(str==null||str.trim().equals("")||str.trim().equalsIgnoreCase("

.net对含有中文的字符串进行MD5加密

MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider(); var Sign = BitConverter.ToString(MD5.ComputeHash(Encoding.GetEncoding("utf-8").GetBytes(result))).Replace("-", "").ToLower(); 将编码从gb2313改为utf-8.

判断一个字符串中是否含有中文字符:

python中的encode和decode: 首先,在Python中字符串的表示是 用unicode编码.所以在做编码转换时,通常要以unicode作为中间编码. decode的作用是将其他编码的字符串转换成unicode编码,比如 a.decode('utf-8'),表示将utf-8编码的字符串转换成unicode编码 encode的作用是将unicode编码的字符串转换成其他编码格式的字符串,比如b.encode('utf-8'),表示将unicode编码格式转换成utf-8编码格式的字符串

CodeIgniter 如何解决URL含有中文字符串

codeIgniter默认的配置下是不允许URL中包含非ASCII字符的,如果URL中含非ASCII字符,那么CI会毫不客气的抛出错误.本文章向码农介绍CodeIgniter 如何解决URL含有中文字符串. 你 可能会说,那我把这个URL使用函数urlencode一下呢?不行.因为Web Server会在接收到一个被urlencode的URL后自动将其decode,然后在PHP里得到的这些字符串转换成他原来所代表的含义,并使用 Web Server自己的URL编码字符集(IIS6 中文版是GBK

PHP中判断字符串是否含有中文

<?php /** * [1.测试一] * 当$str = '中文测试'; 时输出"全部是汉字";当$str = '中a文3测试'; 时输出"不全是汉字"; * 应用说明:当某个地方要求用户输入的内容必须全部是中文时,这个就派上用场了. */ $str = '中文测试'; if (preg_match_all("/^([\x81-\xfe][\x40-\xfe])+$/", $str, $match)) { echo '全部是汉字'; }

php中判断字符串是否全是中文或含有中文的实现代码

header('Content-type:text/html; charset=utf-8'); $str = '你好'; if(preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $str)>0){ echo '全是中文'; }elseif(preg_match('/[\x{4e00}-\x{9fa5}]/u', $str)>0){ echo '含有中文'; }?>

判断字符串中是否含有中文

/**  *判断str中是否含有中文,有则返回true,否则返回false  *   * @param str  * @return  */ private  boolean isChineseCharacter(String str) { for (int i = 0; i < str.length(); i++) { if (str.substring(i, i + 1).matches("[\\u4e00-\\u9fbb]+")) { return true; } } re

php使用strlen()判断中文汉字字符串长度

php使用strlen()判断中文汉字字符串长度 对于含有中文情况,此时可以采用: iconv_strlen($str,"UTF-8"); iconv_strlen 是无论是何种编码,均能计算准确字符个数. aa