在 ABAP 中获取给定索引处的 UTF-16 代码单元
Get UTF-16 code unit at a given index in ABAP
我想获取 ABAP 中给定索引处的 UTF-16 代码单元。
同样可以在 JavaScript 和 charCodeAt()
中完成。
例如"d".charCodeAt();
会返还100
ABAP 中是否有类似的功能?
这可以通过 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_CE
的UCCP
(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 系统代码页是什么(4102
、4103
或其他),这两种方法 return 始终具有相同的值。
我想获取 ABAP 中给定索引处的 UTF-16 代码单元。
同样可以在 JavaScript 和 charCodeAt()
中完成。
例如"d".charCodeAt();
会返还100
ABAP 中是否有类似的功能?
这可以通过 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_CE
的UCCP
(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 系统代码页是什么(4102
、4103
或其他),这两种方法 return 始终具有相同的值。