中英文混合,真讨厌! 面对读入和输出中英文混合的程序,1.如何区分全角和半角2.如何分别中文和英文用wchar_t&wstring就可以解决问题吗?请推荐几篇文献看看。目前主要是在VC2005下开发程序。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、半角就是ACSII码范围的字符(0~0x7f);2、英文就是'A'~'Z'和'a'~'z'。 1、UNICODE模式下,TCHAR就和wchar_t是一回事。2、DBCS/MBCS模式下,要先正确的设置setlocale(),然后用 _tcsinc(), _tcsdec()可以对字符串指针做增减操作,函数内会自动的判断是否为中文,相应的将指针增一或者增二。可参考其他_tsc打头的函数,MSDN里有说明。3、DBCS/MBCS模式下,正确的设置setlocale()后,isleadbyte()函数可以判断字符串指针当前所指字符是否为汉字字符的开始。 使用wchar_t也就是说你是工作在Unicode模式,每个字符有两个字节。英文字符高字节肯定是0(也就是整个字符值小于256)。另外需要注意,所有使用的字符或串前面需要添加前缀L,如L'A', L"HelloWorld" 4楼说法有误,第一个字节大于或等于0xa0,第二个字节不一定的,因为通常windows系统默认的中文字符集是gbk,而不是gb2312。 如果我用char,好像中文第一个是负数 主要char和wchar_t最好不要混合使用(除非你对它们已经很了解了)。要么全部使用Unicode(也就是使用wchar_t),注意默认情况下是使用Unicode(所以这时不要使用char了)要么全部不使用Unicode,所以这时需要创建非Unicode的工程,然后在里面使用char.而在不使用Unicode的情况下面,还需要注意使用的字符集是什么,而在中文环境下,这时通常英文字符只使用一个字节,范围在0和127之间;而中文字符使用两个字节,每个字节都不小于128(如果是signed char,也就是两个字节都是负数)(关于第二个字节的符号我不确认,但是至少第一个字节是负数,而如果对字符集进行扩充,有可能允许第二个字节是正的) 都在说如何判断字符是否为中文的问题,系统已经提供函数了为什么不用?3、DBCS/MBCS模式下,正确的设置setlocale()后,isleadbyte()函数可以判断字符串指针当前所指字符是否为汉字字符的开始。 英文和英文符号都是大于0的中文和中文符号两个字节都是小于0的GB2312和GBK 我记得应该是高位小于0 低位大于零LZ可以自己写个程序测试一下通过编码应该可以判断 楼主应先把 UNICODE 搞明白,再着手开发。 汉语是一个字符由两个字节组成,此方法可以判断前后两个字符是不是属于双字,如果是双字,则前后两个字符可能是属于一个中文或日文字符,楼主不妨试试吧。。呵呵。。BOOL IsWideChar( CHAR szData[2] ){ unsigned int nChar = szData[0] * 256 + szData[1]; if ( _ismbclegal(nChar) != 0 ) { return TRUE; } else { return FALSE; }} 这些字符的转换我也很糊涂,特别是什么 UNICODE ,学习 ISAPI Filter里,有什么方法可以获取当前Filter DLL的文件路径? vs2005到vs2008,VC变化大不? 谁知道有什么好用的可以发送数据包的小工具? 高分求助:请有经验的网络编程高手来帮我看看这个问题 医学图片与数据库 短信发送模块,回答正确马上给分 控制浮点数的输出宽度-----我被狗吃了的基础 谁有MFC的架构图(表) 我创建一个按钮控件CButton,怎么看不见它 !!!简单----CView类??? 程序编译通过了,但是运行中出现警告窗口,无法继续 用MFC做了ActiveX控件,想获得欲下载该控件的URL。
2、英文就是'A'~'Z'和'a'~'z'。
2、DBCS/MBCS模式下,要先正确的设置setlocale(),
然后用 _tcsinc(), _tcsdec()可以对字符串指针做增减操作,
函数内会自动的判断是否为中文,相应的将指针增一或者增二。
可参考其他_tsc打头的函数,MSDN里有说明。
3、DBCS/MBCS模式下,正确的设置setlocale()后,
isleadbyte()函数可以判断字符串指针当前所指字符是否为汉字字符的开始。
另外需要注意,所有使用的字符或串前面需要添加前缀L,如L'A', L"HelloWorld"
因为通常windows系统默认的中文字符集是gbk,而不是gb2312。
要么全部使用Unicode(也就是使用wchar_t),注意默认情况下是使用Unicode(所以这时不要使用char了)
要么全部不使用Unicode,所以这时需要创建非Unicode的工程,然后在里面使用char.
而在不使用Unicode的情况下面,还需要注意使用的字符集是什么,而在中文环境下,这时通常英文字符只使用一个字节,范围在0和127之间;而中文字符使用两个字节,每个字节都不小于128(如果是signed char,也就是两个字节都是负数)(关于第二个字节的符号我不确认,但是至少第一个字节是负数,而如果对字符集进行扩充,有可能允许第二个字节是正的)
isleadbyte()函数可以判断字符串指针当前所指字符是否为汉字字符的开始。
中文和中文符号两个字节都是小于0的
GB2312和GBK 我记得应该是高位小于0 低位大于零LZ可以自己写个程序测试一下
通过编码应该可以判断
BOOL IsWideChar( CHAR szData[2] )
{
unsigned int nChar = szData[0] * 256 + szData[1];
if ( _ismbclegal(nChar) != 0 )
{
return TRUE;
}
else
{
return FALSE;
}
}