如何区别文本是BIG5还是GB?

jamesw 2000-01-04 02:02:00
加精
IsDBCSLeadByteEx(936, szMailBody[i])
可判断是否是GB,
IsDBCSLeadByteEx(950, szMailBody[i])
可判断是否是BIG5,
但很多情况既是GB又是BIG5,
浏览器或RichWin之类中文平台如何判断的?

VB有
StrConv(string, conversion, LCID)
可在BIG5和GB之间通过Unicode转换,
VC可有相似函数?

非常感谢!
...全文
1029 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjzhangyan 2001-11-08
  • 打赏
  • 举报
回复
没有办法,gb与big5代码重叠
jamesw 2000-01-04
  • 打赏
  • 举报
回复
据我找到的材料:

GBK范围:
1st byte 2nd byte
0x81~0xfe 0x40~0x7e and 0x80~0xfe

BIG5范围:
1st byte 2nd byte
0x81~0xfe 0x40~0x7e and 0xa1~0xfe

IsDBCSLeadByteEx()函数通过936和950无法准确判断可能此原因
但RichWin之类外挂中文平台如何做到?

主要是转换问题:
一般可通过查表解决,
但在非中文NT上需要GB和BIG5两种ttf字库,
如通过类似VB的strconv()借unicode把BIG5转为GB,
则只需一个字库。
VC中LCMapString()是否作此用处?如何使用?还请指教!

非常感谢!
huzi 2000-01-04
  • 打赏
  • 举报
回复
你好。
BIG5和GB汉字内码都是双字节的,用适当的统计可以区分。
两个系统的头一个字节都是大于0xa0的,如果第二个字节的取值范围在0x40至0xa0之间的内容,则应该是BIG5编码,否则如果全部汉字的第二个字节都是在0xa1至0xfe之间,则为GB编码。
zdg 2000-01-04
  • 打赏
  • 举报
回复
是不是要用到
WideCharToMultiByte和MultiByteToWideChar
来转换呢???
jiangtao 2000-01-04
  • 打赏
  • 举报
回复
如果GB和Big5在一个文本文件,很难分开

GB范围:
1st byte 2nd byte
b0-ff a0-fe

Big5范围:
1st byte 2nd byte
a0-ff 40-7e or >a0

判断方法如下:(转换代码可以问我要)

function isBIG5(value: string): Boolean;
begin
if (length(value)>=2) then
begin
if (value[1] < #161) then
Result := false
else
if ((value[2] >= #64) and (value[2] <= #126)) or ((value[2] >= #161) and (value[2] <= #254)) then
Result := true
else
Result := false
end
else
Result := false
end;

function isGB(value: string): Boolean;
begin
if (length(value)>=2) then
begin
if (value[1] <= #161) and (value[1] >= #247) then
Result := false
else
if (value[2] <= #161) and (value[2] >= #254) then
Result := false
else
Result := true
end
else
Result := true;
end;


#课程特色相关课程的区别:《ARMv8/ARMv9架构快速入门》 :(本课程),重点突出一个【快】字,让您花最少的时间来了解ARM架构的核心知识点。设计本课程主要基于两个考虑:一是ARM的各个模块之间都有较强的依赖,第1章依赖第2章的知识,第2章又依赖第一章的知识,那么到底先学习哪个? 基于这一点,故设计了一个快速入门的课程,用最快的速度先整体把控一下ARM知识点,然后再按照章节各个击破。二是,一些老板、总监、经理级别的,不需要底层debug,也不需要展开过于详细的技术,仅仅是为了了解下功能和特点,然后进行方案设计或硬件选型。 针对以上两点的考虑,故设计本课程。《ARMv8/ARMv9架构从入门到精通》 :全面全系列的精讲,由简入深,从入门到精通,60多节课,超过21小时...这个课程是主打性价比的课。适合一章一章的来学习,各个击破的同学。适合0基础的同学,也适合资深工程师来查缺补漏。 #课程介绍2021年3月ARM推出了ARMv9架构,随后也陆续更新了ARMv9的IP: 超大核X2处理器、用于服务器的N2处理器、大核A710、小核A510。ARMv9时代已经来临了。Arm无论是架构还是IP,都是在快速发展着。所以这个时候,你再去学习armv7、armv6(15年前或20年前的东西)是不是过时了呢? 要学我们就学习最新架构吧,学习ARMv9、学习armv8.7-arch64。  随着ARM产品的更新与迭代,系统硬件架构也在悄无声息地发生变化,从最初的Big.Little,到DynamIQ,再到给V9使用的DSU-110,硬件架构在迅速迭代和发展着。所以这个时候,你再去学习所谓着big.LITTLE是不是有点过时,直接去学习dynamIQ架构更好呢? 在ARMv9时代的背景下,系统的软件架构也在悄无声息的发生变化,系统在启动过程中有各种各样的阶段,系统在运行的过程有多个os在同时运行。系统里不是只有Linux/Android,系统里可能会有hypervisor、hafnium,可能会有多个VMs,多个SPs….. 所以,我们要学习什么? 仅仅去学习系统软件中的某一个小点? 还是去系统的学习整个架构呢? 学好ARMv8/ARMv9基础支持,有助于我们理解整个体系的软硬件架构。本课程主打安全,从安全的视觉去学习ARM架构。在ARM架构中,安全是必不可缺少的一部分(注:虚拟化属于安全架构的一部分),如果你学习架构不涉及安全,那叫什么学习? 在ARM的架构涉及中,几乎每一个模块和安全多多少少都会有点关系。Arm的异常和中断,一半以上都是和安全相关吧。学习MMU/Cache时不考虑安全时,那么你的学习是不完整的。Trustzone又做为ARM架构中非常重要的一环,如果不学习它,那还谈什么学ARM。 #课程大纲 本课程主要包含以下章节ARM基础讲解 :讲解最新的ARM Roadmap、近10年的ARM发展变化、SOC发展变化;站在设计角度讲解最新的SOC架构、ARM架构、开源软硬件架构;精简得概况ARM的汇编指令集、寄存器等。异常中断讲解:“学习arm安全其实就是学习ARM架构,学习ARM架构最重要的就是学习ARM的异常&中断”。MMU讲解:做为ARM最简单的模块,软件工程师中最需要理解的模块,当然要深深的介绍了。Cache讲解:做为ARM最难的模块,最硬核的部分,也需要深深的解剖。Trustzone/TEE/安全架构 : 本课程比较核心的部分。 本课程都是大时长的大课  最后祝大家学有所成!!  

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧