ABAP and Unicode

2021-03-24 14:08:32 浏览数 (1)

最近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

在有些很特殊的疑难情况下,可能并不是因为大家的代码写得有问题,而是编码问题,不过在现在大家越来越规范的情况下,已经很少出现了。

0 人点赞