中文字符处理的一点点学习总结

本文详细介绍了中文字符的Unicode范围及中文标点符号的Unicode范围,并提供了如何在不同编码间进行转换的方法,包括从单字节到宽字节的转换。此外还探讨了在Linux环境下多字节到宽字节的转换方式以及如何正确地打印中文字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)中文字符的unicode范围:U+4E00..U+9FA5

参考http://summerbell.javaeye.com/blog/563095

2)中文标点符号unicode范围:0xff01 ~ 0xff5e

3)中文字符的高字节小于0,英文字符的高字节等于0,该规则可以用来提取中文字符;


4)读取文件时,目前只知道一个一个字节读取文件,getline(inFile,string bufferLine),未发现有以宽字节的方式读取文件,故读取中文字符文件时,需要char2wchar_t转换函数, MultiByteToWideChar,WideCharToMultiByte

 

//将单字节char*转化为宽字节wchar_t*

wchar_t* AnsiToUnicode( const char* szStr)

{

int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );

if (nLen == 0)

{

return NULL;

    }

    wchar_t* pResult = new wchar_t[nLen];

    MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );

return pResult;

}

 //将宽字节wchar_t*转化为单字节char*

char* UnicodeToAnsi( const wchar_t* szStr )

{

int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );

if (nLen == 0)

    {

return NULL;

    }

char* pResult = new char[nLen];

    WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );

return pResult;

}

 

5)linux版本中多字节char(ansik编码)转换成宽字节(unicode编码)使用:

setlocale(LC_ALL, "zh_CN");//依据系统而定,告诉系统接下来将ansik转换成zh_CN格式的unicode编码

//setlocale(LC_ALL, "chs"); vs2008中这样也ok

int n = mbstowcs(wc,word,sizeof(word));

setlocale(LC_ALL,"C"); 

 

6)打印中文字符:也可以用wprintf,具体注意问题http://blog.youkuaiyun.com/gonxi/archive/2010/10/10/5931006.aspx

wcout.imbue(locale("chs"));

 

wchar_t ss = L'你';

wcout<<ss;

 

 setlocale(LC_CTYPE, "C");

 printf("%S", L"unicode中文/n"); // ⑤

 wprintf(L"%s", L"unicode中文/n"); // ⑦

 

7)字符,字节和编码知识 http://www.regexlab.com/zh/encoding.htm

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值