关于中英文文本处理的问题?
我想给中文文本根据中文的标点符号断句。找到"!?。",他们之间的则为一个句子。
按照窄字节读入,遇到了如下的问题,譬如说这个句子"模式?",
我用str="模式?",str.find("?",0);来进行查找。
"?"的十六进制位A3BF,而"模式"两字"模"的后一十六进制数与"式"字的前一十六进制数的组合恰好位
A3BF,这样查找就产生了错误。
然后我就考虑用宽字符读入,用宽字符查找,但是文本中还有英文的单词,
那么我应该怎么办呢?
问题点数:100、回复次数:7Top
1 楼oilking_zhh(痞子张)回复于 2005-11-07 11:03:47 得分 0
首先判断当前字节得内容是否为英文?如果不是英文在按你说得宽子去判断。
我以前做LED显示得时候也遇到这样得问题,这样就解决了。Top
2 楼ugg(逸学堂(exuetang.net))回复于 2005-11-07 11:40:35 得分 0
string str("你好");
const char *p = str.c_str();
if(*p&0x80 == 0x80)// 中文字符
{
}
else
{//英文字符
}Top
3 楼K()回复于 2005-11-07 12:43:33 得分 0
自己写一个find?
if (*p>128)
//中文
else
//英文Top
4 楼qhfu(改个名字)回复于 2005-11-07 13:45:46 得分 0
用unicode?Top
5 楼cdhit(积极态度)回复于 2005-11-07 13:53:47 得分 0
楼上两位说的都不清楚,
能不能给出依据?
我看一段程序里面是通过判断*p的正负来判断的,
英文是ASCii所以是正的,
中文都是负的。
不知道这样对不对?
等待高手中,企盼能把这个问题讲透彻点。Top
6 楼yyzi(由由籽)回复于 2005-11-07 15:57:02 得分 50
unicode 编码
#define UNICODE
然后所有的字符使用TCHAR ,这样就不存在中英文直接编码的的区别了,不过你的空间利用上
有点小损失:)Top
7 楼wohow()回复于 2005-11-07 16:14:49 得分 50
GB2312编码用两个字节表示汉字,两个字节的unsigned char值均在0xA0~0xFE之间,所以一般可以用正负来判断汉字。英文ASCII都是正的
Unicode中常用的ucs2每个字符使用两个字节,用定义过UNICODE和_UNICODE两个宏的TCHAR,或者干脆就明确的使用wchar_t(Linux中wchar_t是ucs4)。Unicode对国际上大多数字符统一编码,常量字符串用_T("")(对应于TCHAR)或者就明确地使用L""(对应于wchar_t)Top




