Skip to Content

Last week I ended up with a task to convert special characters before writing them into a text file for a legacy system ( no #utf-8 support ) using :

OPEN DATASET lv_filename FOR APPENDING IN TEXT MODE ENCODING NON-UNICODE.

(Don’t forget to check the authority upfront link )

Some special letters as German “Ä ü …” are accepted but others like “šũvá” are to be replaced. Replaced at a best by a close “friend”: ũ -> u;  š -> s to avoid names Like “#av#”

CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'

helps a lot, but I hazzled so much to find a code page that fitted to my needs.

 

 

Here is the code of a small report that converts a “dirty” string and test if it fits to my requirements.

START-OF-SELECTION.

  DATA lv_clean TYPE string.
  DATA(lv_dirty) = 'Jáošũvá Алксй Äü'.
  WRITE lv_dirty.
  
  SELECT cpcodepage FROM tcp00a INTO TABLE @DATA(lt_codepages)
    GROUP BY cpcodepage.
  

  LOOP AT lt_codepages ASSIGNING FIELD-SYMBOL(<s_codepage>).

    CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
      EXPORTING
        intext            = lv_dirty
        inter_cp          = <s_codepage>-cpcodepage
        replacement       = '35'        " Error Chracters are replaced as #
      IMPORTING
        outtext           = lv_clean
      EXCEPTIONS
        invalid_codepage  = 1  
        codepage_mismatch = 2  
        internal_error    = 3
        cannot_convert    = 4
        fields_not_type_c = 5
        OTHERS            = 6.

    IF sy-subrc <> 0.
      WRITE <s_codepage>-cpcodepage && '  error'.
      CONTINUE.

    ENDIF.

    " Fo me only codepages that output german special characters are relevant.
    IF contains( val = lv_clean sub = 'Äü' ).
      WRITE / |{ <s_codepage>-cpcodepage } && ` : ` && { lv_clean } | .
      CLEAR lv_clean.
    ENDIF.
  ENDLOOP.

  EXIT.

With the report I found the SAP Codepage 1157 for my requirments fast.

Be aware, that the conversion takes a while. #performance

There is a helpful wikipage on this topic as well by Former Member  Showing other classes that help on this topic as well.  Thank for posting!

 

 

 


                            
To report this post you need to login first.

2 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply