SAP ABAP实用技巧介绍系列之将unicode字符转换成中文

简介: Created by Jerry Wang, last modified on May 29, 2014


image.png

image.png


image.png

class ZCL_CHINESE_TOOL definition

 public

 final

 create public .

public section.

 type-pools ABAP .

 types:

   tt_post_attributes TYPE STANDARD TABLE OF crmt_soc_post_attr .

 types:

   tt_post_uuid TYPE STANDARD TABLE OF crmt_soc_data_uuid .

 types:

   tt_socialuserinfo type standard table of socialuserinfo .

 class-methods CLASS_CONSTRUCTOR .

 class-methods GET_FORMATTED_STRING

   importing

     !IV_FLAG type CRMT_SOC_UNICODE_FLAG optional

     !IV_STRING type STRING

   returning

     value(RV_STRING) type STRING .

protected section.

private section.

 types:

   tt_sentit TYPE STANDARD TABLE OF crmc_soc_senti_t .

 class-data SV_UNICODE_FLAG type CRMT_SOC_UNICODE_FLAG .

 class-data ST_INVALID type STRING_TABLE .

 class-data ST_CONTROL_FLAGS type STRING_TABLE .

 class-methods IS_HEXDECIMAL

   importing

     !IV_STRING type CHAR4

   returning

     value(IS_HEXDECIMAL) type ABAP_BOOL .

 class-methods IS_VALID_UNICODE_FLAG

   importing

     !IV_FLAG type CRMT_SOC_UNICODE_FLAG

   returning

     value(RV_VALID) type ABAP_BOOL .

ENDCLASS.

CLASS ZCL_CHINESE_TOOL IMPLEMENTATION.

* ---------------------------------------------------------------------------------------+

* | Static Public Method ZCL_CHINESE_TOOL=>CLASS_CONSTRUCTOR

* +-------------------------------------------------------------------------------------------------+

* +--------------------------------------------------------------------------------------

 method CLASS_CONSTRUCTOR.

    APPEND cl_abap_conv_in_ce=>uccp( 'p2d3' ) to st_invalid. "#EC NOTEXT

    APPEND cl_abap_conv_in_ce=>uccp( '1234' ) to st_invalid. "#EC NOTEXT

    DATA: it_taba TYPE STANDARD TABLE OF dd07v,

          it_tabb TYPE STANDARD TABLE OF dd07v.

    FIELD-SYMBOLS:  TYPE dd07v.

  CALL FUNCTION 'DD_DOMA_GET'

     EXPORTING

       domain_name   = 'CRM_SOC_UNICODE_FLAG'

       langu         = sy-langu

       withtext      = 'X'

     TABLES

       dd07v_tab_a   = it_taba

       dd07v_tab_n   = it_tabb

     EXCEPTIONS

       illegal_value = 1

       op_failure    = 2

       OTHERS        = 3.

  LOOP AT it_taba ASSIGNING .

     APPEND -domvalue_l TO st_control_flags.

  ENDLOOP.

 endmethod.

* ---------------------------------------------------------------------------------------+

* | Static Public Method ZCL_CHINESE_TOOL=>GET_FORMATTED_STRING

* +-------------------------------------------------------------------------------------------------+

* | [--->] IV_FLAG                        TYPE        CRMT_SOC_UNICODE_FLAG(optional)

* | [--->] IV_STRING                      TYPE        STRING

* | [<-()] RV_STRING                      TYPE        STRING

* +--------------------------------------------------------------------------------------

 method GET_FORMATTED_STRING.

   CONSTANTS: c_default TYPE CRMT_SOC_UNICODE_FLAG VALUE '\u'.

   TYPES: BEGIN OF ty_pair,

              unicode TYPE char4,

              chinese TYPE char2,

          END OF ty_pair.

   DATA: lv_offset TYPE i,

         lv_start TYPE i,

         lt_match TYPE match_result_tab,

         ls_match LIKE LINE OF lt_match,

         lv_unicode TYPE char4,

         lv_upper TYPE char4,

         lt_chinese TYPE STANDARD TABLE OF ty_pair,

         ls_pair TYPE ty_pair,

         lv_len TYPE i,

         lv_chinese TYPE crmt_soc_unicode_flag,

         lv_replace TYPE char7,

         lv_input TYPE string.

   IF iv_flag IS NOT SUPPLIED.

       sv_unicode_flag = c_default.

   ELSEIF is_valid_unicode_flag( iv_flag ) = abap_false.

       rv_string = iv_string.

       RETURN.

   ELSE.

       sv_unicode_flag = iv_flag.

   ENDIF.

   FIND ALL OCCURRENCES OF sv_unicode_flag IN iv_string RESULTS lt_match.

   IF sy-subrc <> 0.

      rv_string = iv_string.

      RETURN.

   ENDIF.

   lv_input = iv_string.

   lv_len = strlen( lv_input ).

   CLEAR: lt_chinese.

   LOOP AT lt_match INTO ls_match.

      lv_start = ls_match-offset + ls_match-length.

      CHECK lv_len >= lv_start + 4.

      lv_upper = lv_unicode = iv_string+lv_start(4).

      TRANSLATE lv_upper TO UPPER CASE.

      CHECK is_hexdecimal( lv_unicode ) = abap_true.

      lv_chinese = cl_abap_conv_in_ce=>uccp( lv_upper ).

      READ TABLE st_invalid WITH KEY table_line = lv_chinese TRANSPORTING NO FIELDS.

      CHECK sy-subrc <> 0.

      ls_pair-unicode = lv_unicode.

      ls_pair-chinese = lv_chinese.

      APPEND ls_pair TO lt_chinese.

   ENDLOOP.

   LOOP AT lt_chinese INTO ls_pair.

      lv_replace = sv_unicode_flag && ls_pair-unicode.

      REPLACE ALL OCCURRENCES OF lv_replace IN lv_input WITH ls_pair-chinese.

   ENDLOOP.

   rv_string = lv_input.

 endmethod.

* ---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_CHINESE_TOOL=>IS_HEXDECIMAL

* +-------------------------------------------------------------------------------------------------+

* | [--->] IV_STRING                      TYPE        CHAR4

* | [<-()] IS_HEXDECIMAL                  TYPE        ABAP_BOOL

* +--------------------------------------------------------------------------------------

 method IS_HEXDECIMAL.

    CONSTANTS: mask TYPE string VALUE '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.

    IF iv_string CO mask.

       is_hexdecimal = abap_true.

    ENDIF.

 endmethod.

* ---------------------------------------------------------------------------------------+

* | Static Private Method ZCL_CHINESE_TOOL=>IS_VALID_UNICODE_FLAG

* +-------------------------------------------------------------------------------------------------+

* | [--->] IV_FLAG                        TYPE        CRMT_SOC_UNICODE_FLAG

* | [<-()] RV_VALID                       TYPE        ABAP_BOOL

* +--------------------------------------------------------------------------------------

 method IS_VALID_UNICODE_FLAG.

    READ TABLE st_control_flags WITH KEY table_line = iv_flag TRANSPORTING NO FIELDS.

    IF sy-subrc = 0.

       rv_valid = abap_true.

    ENDIF.

 endmethod.

ENDCLASS.

相关文章
|
5月前
|
存储 安全 数据库
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
|
5月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
5月前
|
SQL 负载均衡 监控
SAP ABAP DBSQL_SQL_ERROR 错误
SAP ABAP DBSQL_SQL_ERROR 错误
|
5月前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
|
5月前
|
SQL 监控 Oracle
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
|
5月前
|
存储 前端开发 Linux
在 SAP ABAP 系统里访问 FTP 服务器
在 SAP ABAP 系统里访问 FTP 服务器
|
5月前
|
前端开发 开发工具 Android开发
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
|
5月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
|
5月前
|
开发者 供应链 BI
SAP ABAP CALL SUBSCREEN 代码解析
SAP ABAP CALL SUBSCREEN 代码解析
下一篇
无影云桌面