最近S4MOVE项目多起来了,想到之前上一个升级周期的时候还是10年前,ECC时代,那就总结下这么多年来ABAP发展中的编码;
从6.10版开始,ABAP支持用Unicode对字符进行多字节编码(强制使用)
在6.10版本之前,ABAP只使用基于单字节代码(如ASCII和EBCDIC)或双字节代码(如SJIS和BIG5)的字符集
编码不影响前台显示,大家在US(Unicode system)写的代码,是可以正常的导入到NUS(non-Unicode system)的。
an explicit or implicit assumption is made about the internal length of a character.
所以在对应ECC6.10版本以上的升级,ABAP会有一个工作是对程序进行Unicode的编码转换
接着,先讲一下和ABAP相关涉及项:
字符编码
ABAP开发中的字符设置
NUS的程序限制
Unicode中的ABAP new 程序定义
Unicode中的ABAP new class
Unicode中的ABAP new RFC
Unicode术语表
字符编码:
给大家看一组直观展示的字符编码,同样的文本,在不同的字符编码下有不同的展示:
在过去,SAP开发人员使用各种代码对不同字母的字符进行编码,例如,ASCII、EBCDI或双字节代码页:
ASCII(美国信息交换标准代码):
例如:ISO88591或ISO88595等
用1字节= 8位对每个字符进行编码,最多2个8 = 256个字符,将组合[00000000,11111111]分配给这些字符。
EBCDI(扩展二进制编码的十进制交换):
例如:EBCDIC 0697/0500(IBM格式)
用1个字节对每个字符进行编码,也是表示为256个字符。
双字节码页面:
例如:日文的SJIS和用于繁体中文的BIG5
每个字符1或2字节,形成2的16次方 = 65536的组合,通常只使用10,000 - 15,000个字符。
通常我们的实际电脑使用中就是使用这些字符集,这完全没有问题。但是,如果您想在一个系统中合并来自不同地区的字符集,有可能出现不兼容字的文本,就会出现问题。同样,在具有不兼容字符集的系统之间交换数据也会出现问题。
解决这个问题的一个办法是使用一个包含地球上所有字符的代码。这个代码称为Unicode (ISO/ iec10646),它至少由16位= 2字节,或者32位= 4字节每个字符组成。
这也是为什么R/3开始,SAP的系统强制使用UNS的原因:
使用Unicode,你可以在一个前端计算机上同时使用多种语言。
Unicode允许所有R/3用户安装一个中央R/3系统,覆盖全球所有业务流程。
跨应用程序数据交换需要Unicode,而不会因为不兼容的字符集而丢失数据。(SOAP,API等)
WINDOWS安装下相关的部分动态库:
icudt50.dll
icuin50.dll
icuuc50.dll
在有些很特殊的疑难情况下,可能并不是因为大家的代码写得有问题,而是编码问题,不过在现在大家越来越规范的情况下,已经很少出现了。