提供点线索
解决方案 »
- 请问,在C++中如何将一个GUID变量转换成为string变量?
- 各位高手,小弟想将创建的窗口始终保持最上面, 是所有窗口的最上面,即使打开了象Window任务管理器这样的窗口,我的窗口也要在它的上面(即使我的窗口没激活
- 关于位图!!!!
- 一个SOCKET的小问题,各位大哥帮忙
- socket connect 时报 10049 错误,怎么解决?
- 在一个进程内服务器中(dll)我手动添加了Ontimer消息,但当我用Settimer时,Ontimer不响应,为何?
- ATL控件如何屏蔽ESC键啊?
- 求问各路大侠,Advanced Installer 怎么制作有选择项功能的(客户端或服务端)的安装包么
- 求使用createFile,wretefile等函数使用的例子
- 界面问题
- 大哥大姐!!帮帮我吧!
- 怎样截获XX消息
strHZ="汉字";
char szHZ[100];
sprintf(szHZ,"%s",strHZ);
if(szHZ[0]<0)
AfxMessageBox("汉字");
CString str;
int i;
char p;
p=str[i];
if((unsigned char*)p>0x80)
AfxMessageBox("这是半个汉字");
else
AfxMessageBox("这不是半个汉字");
我国用的是自己定义的GB码,有些是双字节,有些是多字节,于UNICODE很不一样,
其实光凭HEX值,是可以显示任何代码页中的字符的,关键是要和代码页对应上,两个Hex值就可以显示一个汉字.
英文中每一个字符值(大小写)必小于128, 如果你的CString只有两种情况(全英文或全汉字)判断起来比较容易,汉字编码的第一个字节的最高位为1(>128无论是几个字节编码),若是英汉混合的情况,要检出其中一种,稍微麻烦一点,若要处理多国语言,好像有多国语言API函数,可以通过统计的方法检出一直对应的代码页.
我以前涉及过多国语言字符的检索和显示的问题,但没有做得很深!
这里仅提供一种思路,有错的请回贴或发邮件到[email protected],不胜感激!
BYTE TestChar // character to test
);BOOL IsDBCSLeadByteEx(
UINT CodePage, // identifier of code page
BYTE TestChar // character to test
);
CodePage = 936 简体汉字, 950 繁体如果第一个字符是DBCS lead byte,该byte和紧接着的byte组成一个DBCS码。
如:while(i < Length)
{
if(IsDBCSLeadByte(string[i]))
{
// 是DBCS
i += 2;
}
else
{
// 英文
i ++;
}
}
好像unicode是4字节,即双字,即32bit,不知道是不是笔误?
int i=0;
While(i<strlen(ss))
{
if(ss[i]>=0xa0)//全角
{
i++;
i++;
}
else//半角
{
bIsChinese = FALSE;
break;
}
}
void CGlyphDemoView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CGlyphDemoDoc* pDoc;
pDoc = reinterpret_cast<CGlyphDemoDoc *>(GetDocument());
ASSERT_VALID(pDoc);
if(nChar < 127){
//是英文
}
else{
if(ctrl == 0){
a = nChar<<8|nChar&0x0000ffff;
ctrl++;
}
else if(ctrl == 1){
ctrl--;
nChar = a<<8|nChar&0x0000ffff;
}
}
}
如:第一个汉字“啊”的区号为16,位号为01,则其内码为 0xb0,0xa1
GBK范围:
1st byte | 2nd byte
0x81~0xfe | 0x40~0x7e and 0x80~0xfe
BIG5范围:
1st byte | 2nd byte
0x81~0xfe | 0x40~0x7e and 0xa1~0xfe