在 ABAP 中获取给定索引处的 UTF-16 代码单元

Get UTF-16 code unit at a given index in ABAP

我想获取 ABAP 中给定索引处的 UTF-16 代码单元。

同样可以在 JavaScript 和 charCodeAt() 中完成。

例如"d".charCodeAt();会返还100

A​​BAP 中是否有类似的功能?

这可以通过 class CL_ABAP_CONV_OUT_CE

来完成
DATA(lo_converter) = cl_abap_conv_out_ce=>create( encoding = '4103' ). "Litte Endian

TRY.
    CALL METHOD lo_converter->convert
      EXPORTING
        data   = 'a'
        n      = 1
      IMPORTING
        buffer = DATA(lv_buffer). "lv_buffer will 0061
CATCH ...

ENDTRY.

代码页 4102 适用于 UTF-16 Big endian。

不仅可以对单个字符进行编码,还可以对字符串进行编码:

      EXPORTING
        data   = 'abc'
        n      = 3

"n" 始终代表要编码的字符串的长度。它可能小于字符串的实际长度。

当您说“想要获取 UTF-16 编码单元”时,

  • 你是指 Unicode 代码点,例如字符 d 始终是 U+0064(Unicode 字符的官方“名称”,两个字节 0x0064 是十进制 100 的十六进制表示),
  • 或者你的意思是你想将 d 编码为 UTF-16 little endian(SAP 代码页 4103)或 big endian(SAP 代码页 4102),分别给出 2 个字节 0x4400 或 2字节 0x0044.

对于第二种情况,请参阅 József 的回答。

对于第一种情况,您可以使用classCL_ABAP_CONV_OUT_CEUCCP(UniCode Code Point)或UCCPI(UniCode Code Point Integer)方法获取:

DATA: l_unicode_point_hex TYPE x LENGTH 2,
      l_unicode_point_int TYPE i.


l_unicode_point_hex = cl_abap_conv_out_ce=>UCCP( 'd' ).

ASSERT l_unicode_point_hex = '0064'.


l_unicode_point_int = cl_abap_conv_out_ce=>UCCPI( 'd' ).

ASSERT l_unicode_point_int = 100.

编辑:请注意,无论 SAP 系统代码页是什么(41024103 或其他),这两种方法 return 始终具有相同的值。