¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como converter um arquivo XML de UTF16 para UTF8 em ABAP no ECC 6.0

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

É possível converter um arquivo XML de UTF16 para UTF8 usando ABAP? Estou usando ECC 6.0.

Agradeço suas contribuições.

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

4 Respuestas

0
Cargando...
Dados são passados para um campo de string ao ler o conjunto de dados. Aqui não posso usar xstring, então não preciso fazer a etapa 2 neste caso.

Não, na verdade você deve usar xstring, pois deve abrir o arquivo no modo binário (conforme a documentação da SAP que citei anteriormente, essa é a única forma de ler um arquivo codificado em UTF-16). Abaixo, mostro uma versão curta que você poderia tentar como ponto de partida (nunca testei, então pode ser que precise fazer alguns ajustes):


  DADOS:
    file TIPO string,
    data TIPO xstring,
    file_content TIPO xstring,
    conv_in TIPO REF PARA cl_abap_conv_in_ce,
    xml_string TIPO string.

* Ler o arquivo UTF-16 como arquivo binário
  ABRIR CONJUNTO DE DADOS file PARA ENTRADA NO MODO BINÁRIO.
  FAÇA.
    LER CONJUNTO DE DADOS file NO CAMPO data.
    SE sy-subrc = 0.
      CONCATENAR file_content data NO file_content NO MODO BYTE.
    SENÃO.
      SAIR.
    FIM-SE.
  FIM-FAÇA.
  FECHAR CONJUNTO DE DADOS file.

* Converter a sequência hexadecimal file_content com dados do arquivo em uma sequência
  conv_in = cl_abap_conv_in_ce=>create(
       codificação                      = 'UTF-16'
*      endian                        = ' '  " o valor padrão deve estar bom
       entrada                         = file_content ).
  conv_in->ler( IMPORTANDO dados = xml_string ).

  SUBSTITUIR PRIMEIRA OCORRÊNCIA DE SUBSTRING 'UTF-16' POR 'UTF-8' IGNORANDO MAIÚSCULAS.

* Escrever novo arquivo usando codificação UTF-8
  CONCATENAR 'utf8_' file 
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Herald,

Os dados são passados para um campo de string enquanto lê-se o conjunto de dados Read. Aqui não posso usar xstring.

então não preciso fazer a etapa 2 neste caso.

No passo 3, você está me dizendo para substituir UTF-16 por UTF-8 na string xml? Isso está correto?

Obrigado antecipadamente.

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

Hhmm, interessante. Pensei que deveria ser simples, mas as duas soluções que me ocorreram parecem um pouco complicadas. A primeira forma provavelmente seria usar a biblioteca iXML , onde o ponto de partida é a classe CL_IXML . Você pode encontrar a documentação da SAP [aqui|http://help.sap.com/saphelp_nw04/helpdata/en/86/8280d212d511d5991b00508b6b8b11/frameset.htm].

Depois há uma abordagem "manual": Usar OPEN DATASET para ler o arquivo UTF-16, depois modificar o atributo de codificação XML e salvá-lo como arquivo UTF-8. Não é simples, porque a tentadora opção de comando [OPEN DATASET .. LEGACY TEXT MODE CODE PAGE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_MODE.htm] não funciona. Segundo a ajuda do ABAP:

Para a especificação da página de códigos cp, espera-se um objeto de dados de tipo caractere que deve conter - no momento da execução da sentença - a etiqueta de uma página não Unicode desde a coluna CPCODEPAGE na tabela de base de dados TCP00. Uma página Unicode não deve ser especificada.

Parece que esperam que a maioria dos arquivos Unicode sejam UTF-8. Mas essa poderia ser a razão pela qual você quer convertê-lo...

Então siga os seguintes passos:

<ol><li>Abra o arquivo como um arquivo binário (a única opção para UTF-16, veja [aqui|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ENCODING.htm]) através de [OPEN DATASET file FOR INPUT IN BINARY MODE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET.htm] e leia o conteúdo em XSTRING usando [READ DATASET|http://help.sap.com/abapdocu_70/en/ABAPREAD_DATASET.htm].</li>

<li>Converta para uma string usando a classe de utilidade [CL_ABAP_CONV_IN_CE|http://help.sap.com/saphelp_nw04/helpdata/en/79/c554afb3dc11d5993800508b6b8b11/frameset.htm], veja exemplo [aqui|http://wiki.sdn.sap.com/wiki/display/Snippets/ABAP Code Page+Conversions].</li>

<li>Substitua a marca de codificação para UTF-16 no XML por uma referência a UTF-8.</li>

<li>Escreva o conteúdo XML novamente em um arquivo 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] e [TRANSFER|http://help.sap.com/abapdocu_70/en/ABAPTRANSFER.htm]</li></ol>

Talvez alguém tenha uma forma mais curta...

Saudações, harald

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

Hmm, interessante. Pensei que deveria ser simples, mas as duas soluções que pensei parecem um pouco complicadas. A primeira forma provavelmente seria usar a biblioteca iXML , onde o ponto de partida é a classe CL_IXML . Você pode encontrar a documentação do SAP [aqui|http://help.sap.com/saphelp_nw04/helpdata/en/86/8280d212d511d5991b00508b6b8b11/frameset.htm].

Depois há uma "abordagem manual": Usar OPEN DATASET para ler o arquivo UTF-16, depois modificar o atributo de codificação XML e salvá-lo como arquivo UTF-8. Não é simples, porque a tentadora opção de comando [OPEN DATASET .. LEGACY TEXT MODE CODE PAGE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_MODE.htm] não funciona. Segundo a ajuda do ABAP:

Para a especificação da página de códigos cp, é esperado um objeto de dados de tipo caractere que deve conter - - no momento da execução da declaração - a etiqueta de uma página não Unicode da coluna CPCODEPAGE na tabela de base de dados TCP00. Uma página Unicode não deve ser especificada.

Uau, parece que esperam que a maioria dos arquivos Unicode sejam UTF-8. Mas essa poderia ser a razão pela qual você quer convertê-lo...

Então siga os seguintes passos:

<ol><li>Abra o arquivo como um arquivo binário (a única opção para UTF-16, veja [aqui|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET_ENCODING.htm]) através de [OPEN DATASET file FOR INPUT IN BINARY MODE|http://help.sap.com/abapdocu_70/en/ABAPOPEN_DATASET.htm] e leia o conteúdo em XSTRING usando [READ DATASET|http://help.sap.com/abapdocu_70/en/ABAPREAD_DATASET.htm].</li>

<li>Converta-o para uma string usando a classe de utilidade [CL_ABAP_CONV_IN_CE|http://help.sap.com/saphelp_nw04/helpdata/en/79/c554afb3dc11d5993800508b6b8b11/frameset.htm], veja o exemplo [aqui|http://wiki.sdn.sap.com/wiki/display/Snippets/ABAP Code Page+Conversions].</li>

<li>Substitua a marca de codificação para UTF-16 no XML por uma referência a UTF-8.</li>

<li>Escreva o conteúdo XML novamente em um arquivo 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] e [TRANSFER|http://help.sap.com/abapdocu_70/en/ABAPTRANSFER.htm]</li></ol>

Talvez alguém tenha uma forma mais curta...

Saudações, 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?