我记得在dos下识别是否中文ucdos 输出一个汉字,然后读取屏幕的某个部分,如果显示正常那么……
不然:就不是 这个也可以这样: 输出一个big5的汉字,然后识别 再输出一个gb2312的汉字,然后识别 就可以得出:中文(简体、繁体)、英文
解决方案 »
- 把EXCEL的一列赋值到一个一维数组中
- 请问:我已经实现将vb的text框中的信息导入到word中,但是在关闭word后,再按command按钮进行导入,就出错了。不知道问题出在哪里?望赐
- 如何去掉Excel某一列中内容相同的行?
- 在杭州的程序员工资一般是多少啊,感觉这里消费好贵
- 救命呀,我要写64条的判断语句,各位高手有没有更好的方法或算法?
- 关于显示图片的问题。用image可以吗?希望都进来看看吧。
- 关于setfocus方法的问题,再现等候……
- 请教!!!!!!
- 哪位高手帮我看看下面的代码,我为什么关不掉EXCEL.EXE进程? 急!急!!急!!!急!!!! 谢谢!!!!!!
- asPopup控件怎样做才能想COMMAND控件一样,enabled属性为false,按钮变灰,高分求解。
- 关闭一个程序的问题
- 怎样将textbox文本框中内容导入Access数据库的某一张表中
GB-2312 \
>GBK\
Big5 / >UniCode
/
GB-2312 \
>GBK\
Big5 / >UniCode
/
本文摘自《程序员大本营光盘》,如有雷同,不关我的事
话说这个VB6,很是无耻,居然内置了支持Unicode的功能,也就是说,当你读入一个字符串时,它根据本地缺省语言的对应关系将之转换为Unicode,输出时,再从Unicode转换为本地编码。一方面,它当然方便啦,随便出个什么语言的版本都好方便的,而且在Unicode的系统上,如NT,那它可就如鱼得水,Unicode毕竟是软件发展的方向,像现在中文Win9X使用的GBK内码,实际上就是向着Unicode走了一大步。可是在另一方面,这种支持实际上极大地延缓了字符串的处理时间!想想看,如果我们从文件里读一行并显示,本来是很简单的事情,可是在VB6里面,实际上多了一段转换到Unicode的时间,如果我们用字符串从原文件里读一行,然后分析,再写到目的文件里去,实际上就多了两重的时间(本地到Unicode , unicode到本地)。当然对于这种小事,高手们想必也都有处理的办法(如用byte数组来代替字符串)
说了这么一大堆Unicode的坏话,还没说到正题呢,由于VB6内置对Unicode的支持,而Unicode里面分别和 GBK 以及Big5汉字都有对应关系,所以要实现转换也只是一件小事,下面我们就有请本次女主角出场。(哗哗哗哗……掌声不绝。)
函数strConv! 这个美眉大家可能在VB5里面也都见过的,她有一些保镖,可以帮她把字符串在Unicode和本地编码之间转换,而在VB6里面呢,strConv又多了一个保镖!大家请仔细看:
strConv(string,conversion) 'VB5
StrConv(string, conversion, LCID) 'VB6
string呢,就是预转换的字符串了(提示一下,也可以使用byte数组)。
conversion: 是一个整数,只决定转换方式,VB里定义了一些常量,如VBFromUnicode、VBUnicode等等,这些不用我解释大家应该也明白了吧。
LCID:哈,这可是VB6新加入的参数了,长整数, 可以指定编码方式, 如&H404,即Big5码, &H804即GBK码,合理运用这个参数,就可以写出一个非常简单的内码转换工具!
什么?你还不明白,哎,就把源码给你看看吧。
Dim iReadNumber As Integer '读文件号
Dim iWriteNumber As Integer '写文件号
Dim mem() As Byte 'byte数组
Dim strFileName As String '文件名
Dim lLength As Long '文件长度
'将文件内容读入mem byte数组
iReadNumber = FreeFile
strFileName = TextFileName.Text
lLength = FileLen(strFileName)
ReDim mem(lLength) As Byte
Open strFileName For Binary As #iReadNumber
Get #iReadNumber, , mem
Close #iReadNumber
'将mem数组转换为Big5码所对应的Unicode码
mem = StrConv(mem, vbUnicode, &H404)
'再将Unicode码转换为GBK编码
mem = StrConv(mem, vbFromUnicode, &H804)
'写到源文件里去
iWriteNumber = FreeFile
Kill strFileName
Open strFileName For Binary As #iWriteNumber
Put #iWriteNumber, , mem
Close #iWriteNumber
'结束
(笔者用的是中文VB6 Professional 版 + service pack3。)
怎么样,方便吧?短短几行就把Big5码转换到GBK了。
不过方便是方便了,但是呢,也有它自己的缺陷,老实说,用这种方法来转换GB\GBK到Big5码是非常好的,可是把Big5码转过来的话,结果居然是繁体的!看起来真的是很不爽,哎,这也没有办法,Unicode里面就是这个对应关系;此外呢,这样转换毕竟是走了两步路,所以呢,从理论上来说,比别的转码软件慢了一倍!
但是这样转过来可是有两大好处的,一,不会有错误的码,这可是国际标准哟,你想什么? 二,不会有缺字,就像现在的很多转码软件都是从Big5转到GB码,想想看15000字转到六七千字,一一映射,没有缺字才怪!
如何判断文本是GB还是Big5
一 般 是 这 样 辨 别 的 : 1. GB code的 内 码 的 两 个 字 节 都 是 从 A0H - FEH之 间 的 2. BIG code 的 内 码 的 第 一 个 字 节 是 80H - FFH, 第 二 个 字 节 是 00H - FFH 所 以 , 你 要 浏 览 全 文 , 看 看 是 否 有 第 二 个 字 节 是 小 于 7FH的 汉 字 , 如 果 有 的 话 , 一 般 是BIG code的 。 当 然 也 有 特 殊 情 况 , 不 过 非 常 少 见 的