Sap 确定字段中允许的字符数?

Sap 确定字段中允许的字符数?,sap,saprfc,pyrfc,Sap,Saprfc,Pyrfc,这是一个后续问题 使用PyRFC,我可以得到如下功能描述: get_function_description(rfc_name) 每个字段我可以读取uc\u长度和nuc\u长度 如果nuc_length=40和uc_length=80,我如何确定可以放入字段的unicode字符数?不幸的是,我认为这是不可能的。 根据以字节为单位的给定长度,您只能计算适合此字段的最大字符数 对于unicode ABAP系统,我们知道SAP将字符数据存储在代码页4102/4103中,代码页为UTF-16(大端和小

这是一个后续问题

使用PyRFC,我可以得到如下功能描述:

get_function_description(rfc_name)
每个字段我可以读取
uc\u长度
nuc\u长度


如果nuc_length=40和uc_length=80,我如何确定可以放入字段的unicode字符数?

不幸的是,我认为这是不可能的。 根据以字节为单位的给定长度,您只能计算适合此字段的最大字符数

对于unicode ABAP系统,我们知道SAP将字符数据存储在代码页4102/4103中,代码页为UTF-16(大端和小端格式)。这意味着一个字符至少需要2个字节,即在您的示例中,最大长度可以计算为uc_length/2=40个字符。我认为SAP还没有使用任何4字节字符。然而,这在代码页4102/4103中是可能的。因此,这取决于您将在字段中输入哪个Unicode字符,uc_长度=80的字段中可能存储的字符少于40个

对于非Unicode ABAP系统,这甚至更为困难。只要您只使用英文登录语言的代码页1100,字符通常只需要1字节。但如果使用日文和代码页8000,则文本数据可能包含混合的US-ASCII字符和日文字符。这意味着文本字段可能同时包含:1字节字符和2字节字符。更为困难的是,包括1100代码页在内的所有非unicode代码页都存在3字节字符。例如,有些SAP特定的字符图标/符号具有此长度。
因此,nuc_length=40字段最多可以包含40个Unicode字符,但在最坏的情况下也只能包含13个字符。这取决于正在使用的代码页以及在字段中填充的Unicode字符。

不幸的是,我认为这是不可能的。 根据以字节为单位的给定长度,您只能计算适合此字段的最大字符数

对于unicode ABAP系统,我们知道SAP将字符数据存储在代码页4102/4103中,代码页为UTF-16(大端和小端格式)。这意味着一个字符至少需要2个字节,即在您的示例中,最大长度可以计算为uc_length/2=40个字符。我认为SAP还没有使用任何4字节字符。然而,这在代码页4102/4103中是可能的。因此,这取决于您将在字段中输入哪个Unicode字符,uc_长度=80的字段中可能存储的字符少于40个

对于非Unicode ABAP系统,这甚至更为困难。只要您只使用英文登录语言的代码页1100,字符通常只需要1字节。但如果使用日文和代码页8000,则文本数据可能包含混合的US-ASCII字符和日文字符。这意味着文本字段可能同时包含:1字节字符和2字节字符。更为困难的是,包括1100代码页在内的所有非unicode代码页都存在3字节字符。例如,有些SAP特定的字符图标/符号具有此长度。
因此,nuc_length=40字段最多可以包含40个Unicode字符,但在最坏的情况下也只能包含13个字符。这取决于正在使用的代码页以及在字段中填充的Unicode字符。

RFC_CHAR、RFC_NUM、RFC_DATE、RFC_TIME->nuc_length(非Unicode系统的字节数)始终提供最大字符数,因为在非Unicode ABAP系统中,1字节=1个字符。请注意,RFC_日期始终为8个数字字符(YYYYMMDD),RFC_时间始终为6个数字字符(HHMMS)。RFC_字符串是一个字符数可变的字符串(最大约2G字节)。其他RFC_*类型不是字符字段。我通过切换40和80(40个字符对应于nuc_长度=40字节和uc_长度=80字节)来纠正这个问题@SandraRossi非常感谢您纠正我的输入错误。RFC_字符、RFC_数字、RFC_日期、RFC_时间->nuc_长度(非UniCode系统的字节数)始终提供最大字符数,因为在非UniCode ABAP系统中,1字节=1个字符。请注意,RFC_日期始终为8个数字字符(YYYYMMDD),RFC_时间始终为6个数字字符(HHMMS)。RFC_字符串是一个字符数可变的字符串(最大约2G字节)。其他RFC_*类型不是字符字段。我通过切换40和80(40个字符对应nuc_长度=40字节和uc_长度=80字节)更正了这个问题@SandraRossi非常感谢您纠正我的输入错误。如今,自ABAP 7.50以来,只有Unicode系统。不需要讨论可变宽度编码,dixIT:“ABAP编程语言支持由UCS-2覆盖的子集,而不是完整的UTF 16集。”ABAP与UCS-2(它不考虑4字节代理字符作为两个不同的字符),但对于历史SAP GUI软件(DYPRO,ABAP列表)的信息。渲染4字节字符(U+10000-U+10FFFF)的效果非常好。例如,@Sandra Rossi:恭喜你,你现在只需要处理Unicode系统,而不再需要讨论非Unicode场景。也许你看不到它,但它将需要更多的年,直到真的没有这样的安装了。即使是旧的R/3版本3.1也还没有完全消失。Unicode选项从6.10版开始提供。@Sandra Rossi:ABAP语言运行库能做什么或不能做什么并不重要。这可能会随着下一个版本而改变。重要的是数据存储在哪个代码页。这就是UTF-16 AFAIK。您指出:U+20021是一个单字符,在UTF-16中存储有4个字节。是的,ABAP语言目前有此UCS-2限制。我认为SAP GUI也超出了范围。SAP GUI还使用特殊的f