找回密码
 立即注册

QQ登录

只需一步,快速开始

Carl

版主

49

主题

213

帖子

962

积分

版主

Rank: 7Rank: 7Rank: 7

积分
962

活字格认证微信认证勋章

QQ
Carl
版主   /  发表于:2009-12-9 17:29  /   查看:8180  /  回复:0
Post by "Zesson",2006-12-22, 12:46
-----------------------------------------------------

在Vista下输入日文文字的时候 ,一个字可能会在文字选择框中出现两两次,并且这出现的两个字基本上没有什么区别。如下图输入donn 会出现两种吞。

其中有一个吞后面带了一排文字 – 环境依存文字(Unicode)。这种环境依存的文字是Vista下的一种文字集叫JIS2004,并且是日文的默认字符集。在Windows XP-SP2 和Windows 2003-SP1中也安装了。如下图

在Winxp和2003默认情况下输入的日文文字用的字体集是JIS90文字集,就是在Vista下不带环境依存的文字。由于Vista下的日文文字默认用JIS2004,Xp 2003下默认用JIS90,就会出现这种日文文字集不兼容的问题。

如在Vista下输入一个环境依存的吞字存入数据库,然后在Xp 2003没有安装JIS2004日文字体集的情况下或2000下,去显示这个文字,这些文字会被显示成问号,无法正常显示。

并且这些环境依存的文字集在存储数据库的时候也会出现一些怪问题。如果定义一个字段为Char 40, 用Insert语句意外的可以存入40个环境依存的文字,存入后会变成一排问号。Char 40应该只可以存入20个普通的日文文字,但却可以执行存入40个环境依存日文文字的Sql insert语句。十分的奇怪。如果把char改成nchar就一切正常了。

同时在text-ntext vchar-nvchar也有类似的情况。 没有查到微软有资料描述这个JIS2004环境依存的字体集到底怎么存储,占几个字节。但从测试的现象看,这个环境依存的日文文字集的存储方式和JIS90的存储方式不会相同。



Reply by "Carl", 2006-12-23, 9:50
-----------------------------------------------------

我们的控件中也有同样的Bug。

.NET中的 char 类型是对 Unicode16 的封装,而环境依存文字在使用 Unicode32 编码或者不等长编码,也就是说一个环境依存文字会占用数目不确定的几个 char。一个环境依存文字在.NET中叫做 TextElement。

.NET对 TextElement 做了支持,使用 CharUnicodeInfo 类型可以得到一个char或者TextElement对应的Unicode类别,StringInfo 类型提供了把一个string 分割成若干个 TextElement 的能力。

通过反汇编.NET的代码,我们可以看到对于用户输入的文本信息,微软的标准Control都在用 StringInfo 分析它,所以标准的.NET control都能很好的支持这种环境依存文字。



Reply by "Leo", 2006-12-23, 10:27
-----------------------------------------------------


摊主是否有相关JIS2004标准的白皮书。以及该字符集标准和Unicode编码的关系的相关说明?

Unicode现在大概有几种不同的编码方式UTF-8,UTF-16,以及UTF32.

UTF-8是不等长编码,针对ASCII码做了相应的优化,使得西文字符的存储所占空间较小。

.NET中间的Char类型是两个Byte,存储Unicode类型使用的是UTF-16编码方式。

另外更正大家对Unicode一定是双字节的错误观点,最新的Unicode5.0标准已经将字符集扩展到了0x10FFFF。显然这个时候使用两个字节已经不能够存储扩展的Unicode编码。

新增加的非双字节编码的区块包括:

Linear B Syllabary
Linear B Ideograms
Aegean Numbers
Ancient Greek Numbers
Old Italic
Gothic
Ugaritic
Old Persian
Deseret
Shavian
Osmanya
Cypriot Syllabary
Phoenician
Kharoshthi
Cuneiform
Cuneiform Numbers and Punctuation
Byzantine Musical Symbols
Musical Symbols
Ancient Greek Musical Notation
Tai Xuan Jing Symbols
Counting Rod Numerals
Mathematical Alphanumeric Symbols
CJK Unified Ideographs Extension B
CJK Compatibility Ideographs Supplement
Tags
Variation Selectors Supplement
Supplementary Private Use Area-A
Supplementary Private Use Area-B

You can view the new Unicode from this site:http://www.mythic-beasts.com/~mark/cgi-bin/unicode?first=0x020000&last=0x02A6DF

对于我们来说,这些区块中间跟我们关系比较密切的就是CJK Unified Idographs Extension B 和CJK Compatibility Idographs Supplement。这些区块中间会存在一些跟中日韩文相关的一些象形文字。

刚刚提到的这些超过两个Byte编码的Unicode字符,WindowsXP并没有很好的支持。但是Windows Vista 扩展了它的Uniscrip的支持已经可以支持这些区块的字符(当然为了正确显示这些字符,还需要Font的支持)。Uniscrip只能在Unicode文字折行,编辑,测量方面提供支持。

.NET 中间仍然只支持两个Byte的char类型,这个时候一个UTF-32编码的字符会自动转换成两个UTF-16编码存储。


Reply by "WilliamLuo",2006-12-23, 11:11
-----------------------------------------------------

JIS2004白皮书太大,没法上传到这里

另附楼主研究的时候所参考的有关链接:

http://itpro.nikkeibp.co.jp/99/vista/index.html
http://itpro.nikkeibp.co.jp/article/NEWS/20061122/254684/
http://itpro.nikkeibp.co.jp/article/NEWS/20061201/255649/
http://itpro.nikkeibp.co.jp/article/COLUMN/20061211/256519/

http://www.microsoft.com/japan/msdn/windowsvista/compatibility/default.aspx
http://www.microsoft.com/japan/windowsvista/jp_font/default.mspx


Reply by "Leo",2006-12-26, 9:37
-----------------------------------------------------

日文满篇,晕死~。

简单的浏览了一下里面能够看明白的几个汉字。好像说的大致意思是JIS2004标准修正了一些象形文字的字型,比如说在新的MS Gothic 和 MS 明朝 Font中间支持更多的日文汉字的显示。还有一些字的写法问题,在新版本中间被修正了。

本标准未涉及编码问题。但是相关的JISX0213似乎又是日本的汉字编码标准。

不晓得理解的对不对。
2019767656761.png
2019774065633.png
2019775784348.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部