¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo convertir un archivo XML de UTF16 a UTF8 en ABAP en ECC 6.0

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 9 Vistas
0
Cargando...

¿Es posible convertir un archivo XML con UTF16 a UTF8 utilizando ABAP? Estoy utilizando ECC 6.0.

Agradezco tus aportes.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...
Data is passed to a string field while reading Read dataset. here i can't use xstring. so i don't need do step 2 in this case.

No, en realidad debes usar xstring , porque debes abrir el archivo en modo binario (según la documentación de SAP que cité anteriormente, esa es la única forma de leer un archivo codificado en UTF-16. A continuación, te muestro una versión corta que intentaría como inicio (nunca la he probado, por lo que es posible que necesites hacer algunos ajustes):


  DATA:
    file TYPE string,
    data TYPE xstring,
    file_content TYPE xstring,
    conv_in TYPE REF TO cl_abap_conv_in_ce,
    xml_string TYPE string.

* Leer el archivo UTF-16 como archivo binario
  OPEN DATASET file FOR INPUT IN BINARY MODE.
  DO.
    READ DATASET file INTO data.
    IF sy-subrc = 0.
      CONCATENATE file_content data INTO file_content IN BYTE MODE.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.
  CLOSE DATASET file.

* Convertir la cadena hexadecimal file_content con datos de archivo en cadena
  conv_in = cl_abap_conv_in_ce=>create(
       encoding                      = 'UTF-16'
*      endian                        = ' '  " el valor predeterminado debería estar bien
       input                         = file_content ).
  conv_in->read( IMPORTING data = xml_string ).

  REPLACE FIRST OCCURRENCE OF SUBSTRING 'UTF-16' IN xml_string
          WITH 'UTF-8' IGNORING CASE.

* Escribir nuevo archivo usando codificación UTF-8
  CONCATENATE 'utf8_' file 
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Herald,

Los datos se pasan a un campo de cadena mientras se lee el conjunto de datos Read. Aquí no puedo usar xstring.

así que no necesito hacer el paso 2 en este caso.

¿En el paso 3, me estás diciendo que reemplace UTF-16 con UTF-8 en la cadena xml? ¿Es esto correcto?

Gracias de antemano.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hhmm, interesante. Pensé que debería ser sencillo, pero las dos soluciones que se me ocurrieron parecen un poco complicadas. La primera forma probablemente sea usar la biblioteca iXML , donde el punto de partida es la clase CL_IXML . Puedes encontrar la documentación de SAP [aquí|http://help.sap.com/saphelp_nw04/helpdata/en/86/8280d212d511d5991b00508b6b8b11/frameset.htm].

Luego está un enfoque "manual": Usar OPEN DATASET para leer el archivo UTF-16, luego modificar el atributo de codificación XML y guardarlo como archivo UTF-8. No es sencillo, porque la tentadora opción de comando [OPEN DATASET .. LEGACY TEXT MODE CODE PAGE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_MODE.htm] no funciona. Según la ayuda de ABAP:

Para la especificación de la página de códigos cp, se espera un objeto de datos de tipo carácter que debe contener - en el momento de la ejecución de la sentencia - la etiqueta de una página no Unicode desde la columna CPCODEPAGE en la tabla de base de datos TCP00. Una página Unicode no debe ser especificada.

Vaya, parece que esperan que la mayoría de los archivos Unicode sean UTF-8. Pero esa podría ser la razón por la que quieres convertirlo...

Así que sigue los siguientes pasos:

<ol><li>Abre el archivo como un archivo binario (la única opción para UTF-16, ver [aquí|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ENCODING.htm]) a través de [OPEN DATASET file FOR INPUT IN BINARY MODE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET.htm] y lee el contenido en XSTRING usando [READ DATASET|http://help.sap.com/abapdocu_70/en/ABAPREAD_DATASET.htm].</li>

<li>Conviértelo a una cadena usando la clase de utilidad [CL_ABAP_CONV_IN_CE|http://help.sap.com/saphelp_nw04/helpdata/en/79/c554afb3dc11d5993800508b6b8b11/frameset.htm], ver ejemplo [aquí|http://wiki.sdn.sap.com/wiki/display/Snippets/ABAP Code Page+Conversions].</li>

<li>Reemplaza la marca de codificación para UTF-16 en el XML con una referencia a UTF-8.</li>

<li>Escribe el contenido XML de nuevo en un archivo usando [OPEN DATASET file|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET.htm] FOR [OUTPUT|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ACCESS.htm] IN [TEXT MODE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_MODE.htm] [ENCODING UTF-8|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ENCODING.htm] y [TRANSFER|http://help.sap.com/abapdocu_70/en/ABAPTRANSFER.htm]</li></ol>

Tal vez alguien tenga una forma más corta...

Saludos, harald

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hhmm, interesante. Pensé que debería ser sencillo, pero las dos soluciones que se me ocurrieron parecen un poco complicadas. La primera forma probablemente sea usar la biblioteca iXML , donde el punto de partida es la clase CL_IXML . Puedes encontrar la documentación de SAP [aquí|http://help.sap.com/saphelp_nw04/helpdata/en/86/8280d212d511d5991b00508b6b8b11/frameset.htm].

Luego está un "enfoque manual": Usar OPEN DATASET para leer el archivo UTF-16, luego modificar el atributo de codificación XML y guardarlo como archivo UTF-8. No es sencillo, porque la tentadora opción de comando [OPEN DATASET .. LEGACY TEXT MODE CODE PAGE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_MODE.htm] no funciona. Según la ayuda de ABAP:

Para la especificación de la página de códigos cp, se espera un objeto de datos de tipo carácter que debe contener - en el momento de la ejecución de la declaración - la etiqueta de una página no Unicode de la columna CPCODEPAGE en la tabla de base de datos TCP00. Una página Unicode no debe ser especificada.

Vaya, parece que esperan que la mayoría de los archivos Unicode sean UTF-8. Pero esa podría ser la razón por la que quieres convertirlo...

Así que sigue los siguientes pasos:

<ol><li>Abre el archivo como un archivo binario (la única opción para UTF-16, ver [aquí|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ENCODING.htm]) a través de [OPEN DATASET file FOR INPUT IN BINARY MODE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET.htm] y lee el contenido en XSTRING usando [READ DATASET|http://help.sap.com/abapdocu_70/en/ABAPREAD_DATASET.htm].</li>

<li>Conviértelo a una cadena usando la clase de utilidad [CL_ABAP_CONV_IN_CE|http://help.sap.com/saphelp_nw04/helpdata/en/79/c554afb3dc11d5993800508b6b8b11/frameset.htm], ver ejemplo [aquí|http://wiki.sdn.sap.com/wiki/display/Snippets/ABAP Code Page+Conversions].</li>

<li>Reemplaza la marca de codificación para UTF-16 en el XML con una referencia a UTF-8.</li>

<li>Escribe el contenido XML de nuevo en un archivo usando [OPEN DATASET file|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET.htm] FOR [OUTPUT|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ACCESS.htm] IN [TEXT MODE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_MODE.htm] [ENCODING UTF-8|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ENCODING.htm] y [TRANSFER|http://help.sap.com/abapdocu_70/en/ABAPTRANSFER.htm]</li></ol>

Tal vez alguien tenga una forma más corta...

Saludos, harald

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?