【问题标题】:The meaning of nuc_length and uc_length parameters in PyRFC?PyRFC中nuc_length和uc_length参数的含义?
【发布时间】:2019-10-02 09:52:02
【问题描述】:

我最喜欢的搜索引擎 (ecosia) 无法从上游 (SAP) 中找到关于 uc_lengthnuc_length 含义的规范文档。

两者有什么区别?

我用clientPrintDescription.py的修改版本得到这些参数

【问题讨论】:

    标签: sap saprfc pyrfc


    【解决方案1】:

    我不能确定他们在 Python 脚本中做了什么,但根据我的 ABAP/SAP 知识,我可以很容易地说:

    • nuc_length:非Unicode ABAP系统中参数的长度,以字节数为单位
    • uc_lengthUnicode ABAP-based system中参数的长度,以字节数为单位

    基于非 Unicode ABAP 的系统使用一个字节来编码每个字符,而基于 Unicode ABAP 的系统使用两个字节来编码每个字符。从 ABAP 7.50 开始,所有系统都是 Unicode。

    在基于 Unicode ABAP 的系统中,字符串和文本字段可以存储从 U+0000 到 U+FFFF 的 Unicode 字符。请注意,字符 U+D800 到 U+DFFF 被 ABAP 运行时环境视为实际字符(dixit ABAP documentation:“ABAP 编程语言支持 UCS-2 涵盖的子集,而不是完整的 UTF-16 集。”)

    请注意,结构化参数由几个可以混合字符和非字符的字段组成,“uc_length”将使字符字段的字节数加倍。由于"alignment",字段之间也有一些虚拟字节。

    在您的示例中,Unicode 系统中 80 个字节的文本字段对应于 40 个字符。

    【讨论】:

    • 我明白,但这不是直截了当的。我的 SAP 服务器是基于 unicode 的。我查看了相应的 uc_length 并读取了 80。但是现代语言不使用字节作为字符串,它们使用一些高级 unicode 的东西。作为一名开发人员,我想知道:我可以在这个字段中输入多少个字符?当然我可以做数学80 / 2 ===> 40。我知道 utf16 是什么,但是……为什么不告诉开发者他可以传输的 unicode 字符数呢?我知道你不是这个的发明者。非常感谢您的回答。我只需要写下我的想法。
    • @guettli:没那么容易。如果在技术上是正确的,那么以字节为单位的长度是唯一可以确定返回的东西。有多少字符适合那里取决于使用哪个代码页。如果你知道 UTF-16,那么一个字符总是至少需要 2 个字节,但也可能需要 2 个字节的倍数。非 unicode 长度也是如此。标准 US-ASCII 字符通常只需要 1 个字节,但如果指定日文或中文字符,则需要更多字节。您想要的,即最大数量。字符,不能给出,因为它取决于代码页。
    • @Trixx 你说这并不容易。我希望这是可能的。我创建了一个新问题“如何确定字段中允许的字符数?” stackoverflow.com/questions/58203229/…
    • @Trixx 正在谈论 variable-width encoding(又名 DBCS/MBCS),我不知道 ABAP 会考虑此类字符(第一个字符 U+D800-U+DFFF 后跟另一个字符将对应于 U+010000-U+10FFFF 字符)。 ABAP 文档更多地谈论 UCS-2(忽略 U+D800-U+DFFF)而不是 UTF-16。可以肯定的是,Unicode 系统中 80 字节的文本字段最多 40 个字符。
    • 到目前为止,我也只知道使用了 UCS-2 字符。但是,Unicode ABAP 系统使用代码页 4102 或 4103,即 UTF-16。所以理论上这在未来可能会改变,SAP 还可以存储 4 字节字符。真正的 UCS-2 代码页(仅允许 2 字节字符)将是代码页 4100 和 4101。
    猜你喜欢
    • 2019-09-13
    • 2012-11-06
    • 1970-01-01
    • 2011-08-17
    • 2013-08-30
    • 1970-01-01
    • 2021-07-18
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多