如何在简体中文xp下显示big5字符?

guangmingdeshenju 2011-07-31 09:04:15
就是在简体XP下能够正常显示big5的字符,
一款游戏有台湾用户发言,但他输入得是big5,所以其它简体系统上就是乱码。
可不可以在简体系统上安装什么big5字体,就可以让系统能够显示并接受big5输入字符?
...全文
527 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangmingdeshenju 2011-08-07
  • 打赏
  • 举报
回复
输入法一般默认输入的字符都是 操作系统默认的
但它又有自己的库,所以可以选择性地输入其他编码的字符,但支持不得看 接收字符
的软件是如何处理的啦
maquan 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 guangmingdeshenju 的回复:]
输入法的问题?太牵强了。。
现在只能在程序里转换了。。
[/Quote]
不敢说一定是输入法的问题,但貌似跟输入法有一定的关系。

如果我上一贴的分析是正确的,那么“在程序里转换”即使看上去能工作也未必可靠,因为一个“BIG5 字节流”被当作“GBK 字节流”强行解析一遍后,从控件得到的“DBCS 字节流(假设你的程序是 UNICODE 方式编译)”或者是“GBK 字节流(假设你的程序是 MBCS 方式编译)”不仅看上去是乱码,而且事实上可能已经发生了数据残损,有些字符已经被替换了。


————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
maquan 2011-08-03
  • 打赏
  • 举报
回复
查了一些关于输入法(IME)的资料,有一些理解,不一定准确,提出来,欢迎指正:

输入法能够向应用程序输送数据流,从而达到输入字符的目标。而输送的数据流是有编码方式的,在简体中文的操作系统中,最常见的就是 GBK 编码。有些输入法能输入繁体字,但也是用的 GBK 编码,比如搜狗/Google输入法。

但是,有些输入法提供的可能就是 BIG5 的数据流(比如极点五笔,没接触过,纯属猜测),那么,对于简体中文版的应用程序(即使是用 UNICODE 方式编译,但运行时的 Locale 还是 0804),它期望的数据流是 GBK 的(这个特性应该是 Windows 标准控件的缺省形式),所以就导致了上屏即为乱码。

如果输入法能选择输出为 GBK 编码方式(同样可以输出繁体字),则问题自然解决。否则就要改造 EDIT 控件,让它识别出 IME 的语言类型,然后对输入的数据流进行适当的编码转换,这个可以参考微软提供的例子 http://msdn.microsoft.com/en-us/library/0x02zb6d(v=vs.71).aspx


————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
guangmingdeshenju 2011-08-03
  • 打赏
  • 举报
回复
输入法的问题?太牵强了。。
现在只能在程序里转换了。。
guangmingdeshenju 2011-08-02
  • 打赏
  • 举报
回复
我尝试过的:
就是用极点五笔输入big5字符,比如我打出的是“你好”,但当你确定后,输到文本框上的却是乱码。。。。
这个怎么解释?
maquan 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 guangmingdeshenju 的回复:]
我只是想知道 可不可以安装什么字体库。。实现 简体系统显示big5字符。。
这是重点。。。。
还有就是在繁体系统上安装简体字,实现显示gbk
有没有什么实现。。。。
[/Quote]
绝对可以。你有没有注意到,就在这个 CSDN 论坛里,偶尔就有用繁体字发言的?

一般情况下,装 XP 的时候,缺省应该是安装了繁体字库的。你说的“一款游戏有台湾用户发言,但他输入得是big5,所以其它简体系统上就是乱码”,最有可能的原因,不是因为显示的时候没有繁体字库,而是输入的时候没有进行恰当的编码处理。


————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
gz_qmc 2011-08-02
  • 打赏
  • 举报
回复

信息流A------>字库A-------\
\
信息流B------>字库B---------屏幕看到的结果
/
信息流C------>字库C-------/
gz_qmc 2011-08-02
  • 打赏
  • 举报
回复
不管是英文字符还是中文字符
原理其实很简单

就是从信息流得到一个数据
根据该数据到字库对应位置取字模
根据字模数据画字

我们在屏幕看到的结果是一样的情况
可以这样表示

信息流A------>字库A-------\
\
信息流B------>字库B---------屏幕看到的结果
/
信息流C------>字库C-------/

那么,楼主现在手头有的条件是: 信息流BIG,字库GB
那么结局办法有四种:
一是转换信息流: 信息流BIG-->★-->信息流GB-->字库GB-->屏幕
二是转换字库 : 信息流BIG-->字库BIG-->屏幕

第一种办法要在源程序实现,一般是 信息流BIG-->unicode-->信息流GB
第二种办法嘛相对简单,但要软件本身提供字体设置功能,还要知道软件本身使用的字库
找个台湾朋友传一个他机器上的就可以了.

第三种办法难度大,是第一种的扩展,随便说说
自创游戏修改类似的程序,监控软件资源,更改信息流BIG-->信息流GB
第四种办法更难,直接扫描软件组成文件,修改所有的信息流BIG-->信息流GB

三四两情况要求对内存,文件结构等知识熟练掌握,有判断能力.

O了,楼主看着办

gz_qmc 2011-08-02
  • 打赏
  • 举报
回复
装字库可以
程序配合在不同区域使用不同字库
maquan 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 guangmingdeshenju 的回复:]
就是空格上屏后就乱码。。
现在可不可以有什么方法对输入得字符进行判定,如果是big5再转换成unicode或gbk。
不同的编码可以判定嘛?
大家都在说unicode,可用户输入可能是其它编码啊?
[/Quote]
感觉像是输入法的问题……
maquan 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 guangmingdeshenju 的回复:]
就是在简体XP下能够正常显示big5的字符,
一款游戏有台湾用户发言,但他输入得是big5,所以其它简体系统上就是乱码。可不可以在简体系统上安装什么big5字体,就可以让系统能够显示并接受big5输入字符?
[/Quote]
这个问题我是这么理解的:

对于一个文本框来说,不存在“输入 BIG5”这种说法,只能说“输入了繁体字”,因为在 Windows 标准控件里字符都是用 Unicode 表示的(就如楼上所说,Windows 内核是 Unicode 的)。

而当你的程序试图从文本框里取出字符串的时候,终究是要通过 API 的。如果你的程序是用 UNICODE 方式构建的,就没问题了,因为你将调用的是 Unicode 版的 API(比如 GetWindowTextW),程序本身的字符串存储形式也是 Unicode 的;但如果你的程序是用“多字节字符集(MBCS)”或者 ANSI 构建的,那么你调用的就是 ANSI 版的 API(比如 GetWindowTextA),程序本身的字符串存储形式也将是 GBK 的,而 GBK 字符集能表达的内容并不包括 Unicode 中的所有繁体字,也就是说,字符串从文本框里取出来的时候就变成乱码了。


————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
gz_qmc 2011-08-02
  • 打赏
  • 举报
回复
http://download.csdn.net/source/2436504
这个计算器你可以下去试试

有一个BIG和GB调试转换的功能
你把你得的那个乱码拷贝到右下角的框里,只转一个汉字

然后把GB2312框得到的数据输入到BIG--5框里
如果汉字正常了,说明问题就是了
guangmingdeshenju 2011-08-02
  • 打赏
  • 举报
回复
就是空格上屏后就乱码。。
现在可不可以有什么方法对输入得字符进行判定,如果是big5再转换成unicode或gbk。
不同的编码可以判定嘛?
大家都在说unicode,可用户输入可能是其它编码啊?
Zimmerk 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 guangmingdeshenju 的回复:]

我尝试过的:
就是用极点五笔输入big5字符,比如我打出的是“你好”,但当你确定后,输到文本框上的却是乱码。。。。
这个怎么解释?
[/Quote]
是空格上屏后就出现乱码还是你再输出去另一个文本框了?一般来说只上屏不会出现乱码。。。这种情况还真没有遇过
gz_qmc 2011-08-02
  • 打赏
  • 举报
回复
输入法的原理应该是:


给输入法自己 -->输入法的输出处理-->新信息流A-->显示A
/
键盘信号-->输入法处理-->信息流S
\
给计事本软件 -->记事本的输出处理-->新信息流B-->显示B


请问,信息流S是BIG流还是GB流
请问,新信息流A和新信息流B是一样的吗?
请问,显示A和显示B是一样的吗

为什么要区分显示?因为显示的时候确定调用的字库

这么多不同点,你为结果会一样吗?
gz_qmc 2011-08-02
  • 打赏
  • 举报
回复

下面你看了就清楚为什么了

给极点输入软件 -->处理-->显示
/
键盘输入-->信息流
\
给计事本软件 -->处理-->显示


现在输入软件提示框显示的是正常的
那么计事本是不是应该也正常啊????????

一个信息流针对一个软件和针对两个软件是一回事情吗????

想不过来是你的事情.慢慢想
辰岡墨竹 2011-08-02
  • 打赏
  • 举报
回复
如果不用SBAppLocale或AppLocale,你只能让用户修改自己的“非Unicode程序的语言”设置,但是这样会影响到Office、MS安装服务等程序,导致那些用户自己的ANSI程序乱码,副作用太大。
辰岡墨竹 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 guangmingdeshenju 的回复:]

程序编译成unicode的,用户如果还是输入big5或者gbk。。
那会怎么样?
就是说输入框根本无法显示吧?
[/Quote]

不,因为Windows内核是Unicode的,同样输入组件也是。它会根据应用程序的类型,选择ANSI或Unicode编码。不过现在一般的主流输入法都是Unicode的。
光安装Big5字体是没有用的。你可以打开“控制面板”里的“区域和语言选项”,在“高级”里有一个“非Unicode程序的语言”。这个设置是全局设置,也就是所有用户都只能用同一种ANSI编码。
编码是比字体是更底层的东西,编码解释不对,字体显示肯定不对。而且ANSI程序调用的API肯定是ANSI版本的,然后会被转换为Unicode,传递给Unicode函数。你无法指定API用其它编码来解释传入的字符串。
只用一种方法,就是用SBAppLocale,这是一个微软的AppLocale的命令行克隆版,无需安装。
http://www.steelbytes.com/?mid=45
不过和Unicode程序比较来说,这种方法只能是下策。因为Big5的字符和GBK的字符数量不一样,也不是一一对应的。因为无法进行完全一对一的转换。举个其它的例子,GBK里没有日文的片假名间隔点和半角假名,基于GBK的ANSI程序无法打开名字里含有这些符号的文件。
纯Unicode程序就不存在这个问题。
用户 昵称 2011-08-01
  • 打赏
  • 举报
回复
unicode不分繁简,只要有字库,就能显对。
Waistcoat22 2011-08-01
  • 打赏
  • 举报
回复
如果编译为UNICODE,不论用户输入的BIG5还是GBK,都可以正常显示的,因为不论是啥字符,UNICODE编码是固定的,操作系统内部实现就是UNICODE的。
加载更多回复(6)

16,548

社区成员

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

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

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