BizTalk对Outbound/Inbound message字符编码的转换
一般的Linux/unix环境出来的报文大部分使用UTF-8,而Windows环境则大多是UTF-16(Unicode)编码方式。因此很多时候都需要转换报文的编码方式
方法一
通过BizTalk server 2006的XML Transmit pipeline TargetCharset的值进行设定将 TargetCharset 值设置为 Big-Endian-UTF 16,希望使用UTF-16(Unicode)
注意:方法一可能存在bug,不会像你预期的那样转化。
方法二
使用自定管道,例如,XML 组装器组件的自定义管道中设置 目标 charset 属性,如下所示:• 若要使用 UTF-8 编码格式,将 目标 charset 属性设置为 UTF-8 (65001) 。
• 若要使用 UTF-16 编码格式,将 目标 charset 属性设置为 Big-Endian-UTF 16 (1201) 或 Little-Endian-UTF 16 (1200) 。
方法三
使用业务流程赋值实现,例如,将 MessageAssignment 形状添加到一个新的业务流程。 接下来,双击 MessageAssignment 形状。 然后,键入下面的代码的 BizTalk 表达式 Editor.<Message_Name>(XMLNORM.TargetCharset) = "unicode";
unicode utf-8 utf-16之间有什么区别与联系
Unicode:
unicode.org制定的编码机制, 要将全世界常用文字都函括进去.
在1.0中是16位编码, 由U 0000到U FFFF. 每个2byte码对应一个字符; 在2.0开始抛弃了16位限制, 原来的16位作为基本位平面, 另外增加了16个位平面, 相当于20位编码, 编码范围0到0x10FFFF.
UTF: Unicode/UCS Transformation Format
UTF-8, 8bit编码, ASCII不作变换, 其他字符做变长编码, 每个字符1-3 byte. 通常作为外码. 有以下优点:
* 与CPU字节顺序无关, 可以在不同平台之间交流
* 容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)
UTF-16, 16bit编码, 是变长码, 大致相当于20位编码, 值在0到0x10FFFF之间, 基本上就是unicode编码的实现. 它是变长码, 与CPU字序有关, 但因为最省空间, 常作为网络传输的外码.
UTF-16是unicode的preferred encoding.
UTF-32, 仅使用了unicode范围(0到0x10FFFF)的32位编码, 相当于UCS-4的子集.
UTF与unicode的关系:
Unicode是一个字符集, 可以看作为内码.
而UTF是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.
软件有三种途径来决定文本的字符集和编码:
最标准的途径是检测文本最开头的几个字节,如下表:
开头字节 Charset/encoding EF BB BF UTF-8 FE FF UTF-16/UCS-2, little endian FF FE UTF-16/UCS-2, big endian FF FE 00 00 UTF-32/UCS-4, little endian. 00 00 FE FF UTF-32/UCS-4, big-endian.