¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como manter o valor hexa 0C ao ativar Unicode em programas Z

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

Olá Especialistas,

Preciso verificar nossos programas Z para ver se a bandeira Unicode está ativada e alterá-los, se necessário.

Um dos programas altera o caractere especial "hex 0c".

Aqui está o código do programa não Unicode:

DATA: gv_xstring TYPE x.

DATA: ff_cstring TYPE c.

DATA: BEGIN OF gv_struc,

gv_struc_val TYPE counter1,

END OF gv_struc.

gv_xstring = '0C'.

gv_struc-gv_struc_val = gv_xstring.

ff_cstring = gv_struc.

Depuração:

Variável:                                      Valor    valor-hex

GV_XSTRING                                0C        0C

GV_STRUC-GV_STRUC_VAL    12          0C

FF_CSTRING                                #            0C

Com "Unicode ativo", não é mais permitido fazer "ff_cstring = gv_struc."

Como posso alterar o código para que o valor hexa permaneça o mesmo, 0C?

Em todas as variantes que tentei, o valor hexa muda, mesmo se o valor continuar sendo #.

Você pode me ajudar, por favor?

Muito obrigada,

Monika

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

4 Respuestas

0
Cargando...

Olá Monika,

Parece que você tem um programa legado que moveu um valor de byte (0c) para um campo CHAR. Isso funcionava em sistemas não Unicode (pois os campos CHAR e HEX tinham o mesmo tamanho, e 0C era um caractere de controle válido), mas não pode funcionar em sistemas Unicode: Em um sistema Unicode, um campo CHAR 1 tem uma largura de 2 bytes. No entanto, um campo HEX1 continua sendo de 1 byte. Portanto, não pode haver uma conversão canônica de CHAR1 para HEX1.

Os caracteres em sistemas Unicode são representados pela codificação UTF-16, que requer 2 bytes por caractere. Agora, um 0C em um sistema não Unicode representa um caractere de avanço de formulário. Na codificação UTF-16 de um sistema Unicode, um caractere de avanço de formulário seria U+000C, que é codificado binariamente como 000C (big-endian, página de códigos SAP 4102) ou 0C00 (little-endian, página de códigos SAP 4103), dependendo da arquitetura do seu hardware.

Você pode usar um field-symbol para mover os 2 bytes de um campo Type X (com comprimento = 2!) para um campo CHAR1 em Unicode. Mas certifique-se de usar a ordem correta dos bytes para representar seu caractere especial no campo X.

Saudações,

Alex

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

Roberto, obrigado pela sua ajuda rápida!

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

Olá.

Experimente esta solução

CLASSE cl_abap_container_utilities DEFINIÇÃO CARREGA .

CHAMADA MÉTODO cl_abap_container_utilities => fill_container_c

EXPORTANDO

im_value = gv_struc

IMPORTANDO

ex_container = ff_cstring

EXCEÇÕES

illegal_parameter_type = 1

OUTROS = 2 .


Espero ter ajudado

Adeus

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

Olá.

Experimente esta solução

CLASSE cl_abap_container_utilities DEFINIÇÃO CARGA .

CHAMADA MÉTODO cl_abap_container_utilities => fill_container_c

EXPORTAR

im_value = gv_struc

IMPORTAR

ex_container = ff_cstring

EXCEÇÕES

illegal_parameter_type = 1

OUTROS = 2 .


Espero ter ajudado

Adeus

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?