------
没想到啥好方法 似乎可以用
AnsiString::TStringMbcsByteType temp; 捕获异常
UP
------
linux下的unicode解决方案大部分是utf8,只能去看utf8的文档.
而且中文的utf8编码还不连续.
个人不看好utf8的中文编码.兼容性不好.
中文编码还是国标的兼容性比较好.
unicode16和gb18030大部分是兼容的.
------
最好先了解清楚编码的概念和意义。
------
关注一下
------
mark
------
mark
------
路过
------
根据下列代码, 就可以查找出字符中间的中文内容, 如果需要判断是否有法文字符,就需要判断当前 代码页
void SplitChar(const wxString& sOri, std::vector<wxString>& vectStr)
{
const char *cValue = sValue.c_str();
int iNO = 0;
while(iNO < strlen(cValue))
{
BYTE b1 = (BYTE)cValue[iNO];
if(b1<=127)
{
wxString s = sValue.Mid(iNO, 1);
vectStr.push_back(s);
iNO++;
continue;
}
if(strlen(cValue) > iNO+1 )
{
BYTE b2 = (BYTE)cValue[iNO +1];
if(
((b1 >= 0xA1 && b1 <= 0xA9) && (b2 >= 0xA1 && b2 <= 0xFE) ) || //GBK1
((b1 >= 0xB0 && b1 <= 0xF7) && (b2 >= 0xA1 && b2 <= 0xFE) ) || //GBK2 6763
((b1 >= 0x81 && b1 <= 0xA0) && (b2 >= 0x40 && b2 <= 0xFE) ) || //GBK3
((b1 >= 0xAA && b1 <= 0xFE) && (b2 >= 0x40 && b2 <= 0xA0) ) || //GBK4
((b1 >= 0xA8 && b1 <= 0xA9) && (b2 >= 0x40 && b2 <= 0xA0) ) //GBK5
)
{
wxString s = sValue.Mid(iNO, 2);
vectStr.push_back(s);
iNO+=2;
continue;
}
if(strlen(cValue) > iNO+3)
{
BYTE b1 = (BYTE)cValue[iNO];
BYTE b2 = (BYTE)cValue[iNO +1];
BYTE b3 = (BYTE)cValue[iNO +2];
BYTE b4 = (BYTE)cValue[iNO +3];
if((b1 >=0x81 && b1<= 0xFE) &&
(b2 >=0x30 && b2<= 0x39) &&
(b3 >=0x81 && b3<= 0xFE) &&
(b4 >=0x30 && b4<= 0x39) )//GB18030
{
wxString s = sValue.Mid(iNO, 4);
vectStr.push_back(s);
iNO+=4;
continue;
}
}
}
//WMQ::MyAssert(false, "45CF90B3-16B14198-C24EB224-17E49DC8", true);
wxString s = sValue.Mid(iNO, 1);
vectStr.push_back(s);
iNO++;
continue;
}
}
------
unicode 不知怎么判断 顶一下
------
UP
------
up
------
------
不懂,帮顶,不好意思。
------
利用字符串指针,逐个读取,判断是否为汉字即可
------
好,正在寻求答案
------
------
up
------
up
------
Unicode/GBK/gb2312/gb18030/UTF-8
不知道编码来判断是不是中文,只能是猜,不能完全给出正确结果.
对的,只能猜
11. 如何判断一个文本文件是ANSI还是Unicode?
判断如果文本文件的开头两个字节是0xFF和0xFE,那么就是Unicode,否则是ANSI。
12. 如何判断一段字符串是ANSI还是Unicode?
用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方…
------
linux没玩过!
------
study
------
顶1楼
------
学习一下
------
不管是多字节,还是UNICODE,一个字节一个字节去看最高的bit,是否为1, 为1 就是汉字。
如果是UNICODE,那么你可以拿出第一个字节,如果高位是1,那么接着拿下一个字节,这两个字节是一个汉字,如果是0, 那么这个字节的内容就是你要的字符,高字节可以忽略。
------
必须逐个字符读取,根据字符范围进行判断,根据文件头是不行的,文件头可以改
------
用什么转换啊?
------
ding
------
好东西啊谢谢分享啊
------
mark
------
2个字节一个中文,一个字节一个Char型变量。第一个字节数〉128说明其为GB编码
------
关注..
------
严重关注~~~
------
关注
------
用正则行不?
------
关注
------
------
------
关注中。。。
------
关注中,学习中。。。。。。
------
首先,汉字是双字节的编码格式!
汉字的第一字节:是从0xB0 开始编码
汉字的第二字节:是从0xA1 开始编码
有了以上的了解,就不难识别出是中文,还是其他的编码!
程序中只需要判断( 第一字节>0xB0 && 第二字节>0xA1 )就好!
以上在中文操作系统win 98/me/2000/xp 上调试成功
以上是个人意见仅供参考,如有错误请各位指正!
------
修正:
程序中只需要判断( 第一字节>0xB0 && 第二字节>0xA1 )就好!
应该为:
程序中只需要判断( 第一字节>=0xB0 && 第二字节>=0xA1 )就好!
让各位见笑了!
------
...................................
------
up
------
mark
------
判断字节数,然后根据实际编码情况(Unicode/GB2312/GBK等),确定是否中文。
------
挺实际的问题,顶!
------
学习了,纯帮顶!
------
不会,给个java的,参考参考
把每两个字符组合一起用正则表达式来判断[^\u4e00-\u9fa5]
JAVA:
import java.util.regex.*;
public class Test
{
public static void main(String[] args)
{
String str = "Matrix-绿茵汗将";
String regEx = "[\u4e00-\u9fa5]";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(str);
boolean hasChinese=m.find();
if (hasChinese)
{
System.out.println("字符串含有中文字符");
}
else
{
System.out.println("字符串中没有中文字符");
}
}
}
javascript:
f(/[^\x00-\xff]/g.test(frm.aaa.value)){
alert("不能含有汉字,请重新输入");
return false;
}
正则表达式
[^\u4e00-\u9fa5] 匹配非汉字,如果返回true,则字符串不是全部由汉字组成;如果返回false,则字符串全部由汉字组成。
[^0-9] 匹配非数字,如果返回true,则字符串不是全部由数字组成;如果返回false,则字符串全部由数字组成。
------
mark
------
貌似很多高手。。。
------
这个就是编码的自动识别了,只有先识别了是什么编码的文本,才能针对性的去判断是否为中文。
基本思路是
1.判断当前文本的编码
2.判断出来后,读入字符串中并把它统一转换成unicode或者utf-8的字符串。
3.根据unicode或者utf-8的编码中中文字符的编码范围来判断每个字符是不是中文。
这里面最难的是第一条,这个最成功的典范是ie,firefox这些浏览器中编码识别的实现。基本思路是猜,因为BOM是可以改的,甚至可以没有。
因此靠bom等来识别编码是错误的思路。。只能是猜,基于某种算法来猜,只要算法合理则基本上不会出错,但不可能是100%,你看有时候ie看网页
不是也会乱码啊,那就是猜错了。。。
因为firefox是开源的,所以判断编码的源代码在网上有下的,你找找看。
------
汉字的编码多了去了,双字节就一定是中文????
------
------
------
up 72楼
------
mark
------
没玩过LINUX,不过是好贴
------
------
up
------
mark...
------
mark
------
Study
------
xueix
------
学习
------
在unicode 字符串中,中文的范围是在4E00..9FFF:CJK Unified Ideographs。
通过对字符的unicode编码进行判断来确定字符是否为中文。
protected bool IsChineseLetter(string input,int index)
......{
int code = 0;
int chfrom = Convert.ToInt32("4e00", 16); //范围(0x4e00~0x9fff)转换成int(chfrom~chend)
int chend = Convert.ToInt32("9fff", 16);
if (input != "")
......{
code = Char.ConvertToUtf32(input, index); //获得字符串input中指定索引index处字符unicode编码
if (code >= chfrom && code <= chend)
......{
return true; //当code在中文范围内返回true
}
else
......{
return false ; //当code不在中文范围内返回false
}
}
return false;
}
------
UP~! Mark
------
UP
------
貌似还没有结果~~
------
看不懂
------
学习一下,不是十分了解
------
学习,关注
------
学习一下,UP
------
学习了,谢谢
------
我查了一下,找到了这个猜字符编码的算法代码,叫chartdet 它是mozilla firefox使用的自动字符集探测算法
这个算法的最初作者是frank Tang,C++源代码在http://lxr.mozilla.org/mozilla/source/intl/chardet/,可以从http://www.mozilla.org/projects/intl/chardet.html得到更多关于这个算法的信息。
jchardet是mozilla自动字符集探测算法代码的java移植,其源代码可以从sourceforge下载
------
你看看它的文档,然后可以就可以编译成lib调用。
只要用chardet先判断出你的字符源(例如来自txt文档的内容,网页等等)的编码,就可以用这种编码把文本读入字符串并转换成你想要的编码中,然后就可以根据在这种编码中汉字的范围判断是不是汉字。
------
学习
------
------
说啦这麽多!没有人给出确认代码或答案?
桂ICP备07017180号