在经过XMLExport 和 XMLImport工具的export和import后,为什么字符数据的编码与原来的编码不一样了? (DBMR 1917; 版本: DBMaster 4.X)

~ 0 min
2016-02-25 07:58

A1. 对于日文版DBMaster, XML文件的编码是Shift_JIS。Shift_JIS编码有两种:83pv和90pv。

因为DBMaster XMLImport 内部在数据插入之前会将数据转换为Unicode编码。默认情况,Unicode对应于90pv类型的Shift_JIS。所以,如果原来的数据是83pv的数据,在import到数据库后,83pv的数据会被转换为90pv的数据。

更详细信息请参考:http://homepage1.nifty.com/hm7/works/AppleScript/83pvSpChar-to-90pv.text

在将数据插入到数据库之前,用户可以将83pv转换为90pv,因为DBMaster 4.x系列产品的XMLImport仅接受90pv Shift_JIS。

DBMaster 4.x 系列只支持90pv是因为微软的公告:http://support.microsoft.com/kb/170559/EN-US/。 所以我们将83pv转换到90pv。

DBMaster 5.x 系列会支持83pv,而不需要转换为90pv,因为日文操作系统(CP932)采用83pv,比90pv更常见。

例如:

假设用户原来的数据(∈∋⊆⊇⊂⊃∪∩∧∨¬)是83pv的,16进制编码为81 B8 81 B9 81 BA 81 BB 81 BC 81 BD 87 9C 87 9B 81 C8 81 C9 FA 54。Import到数据库后,83pv数据被转换为90pv数据,导入后的90pv的数据的16进制编码为81 B8 81 B9 81 BA 81 BB 81 BC 81 BD 81 BE 81 BF 81 C8 81 C9 81 CA。

DBMaster XMLImport内部会在插入数据之前将数据转换为Unicode:

  1. 得到83pv数据'0x879c'  => 转换为Unicode - 0x222a  (因为DBMaster 使用expat分析器来解析xml文件,而expat解析器只接受Unicode data。)
  2. 得到Unicode 数据- 0x222a ,插入到数据库中,将Unicode 数据 - 0x222a 转换为Shift-jis; 这时,Unicode 默认映射到90pv类型 Shift_JIS,所以数据传输的数据是'0x81be'。ASCII码数据是不同的。

无论是83pv shift-jis (∩- 0x879c) 还是90pv shift-jis(∩-0x81be) 都是映射到Unicode - 0x222a, 所以在浏览器端的数据显示是一样的。但是,ASCII编码的数据处理不同。

平均分: 0 (0 投票)

你不能对该内容发表评论

标签