Avalados por :

Cómo mantener el valor hexa 0C al activar Unicode en programas Z

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

Hola Expertos,

Tengo que verificar nuestros programas Z para ver si tienen activada la bandera Unicode y cambiarlos si es necesario.

Uno de los programas cambia el carácter especial "hex 0c".

Aquí está el código del programa no 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.

Depuración:

Variable:                                      Valor    valor-hex

GV_XSTRING                                0C        0C

GV_STRUC-GV_STRUC_VAL    12          0C

FF_CSTRING                                #            0C

Con "Unicode activo", ya no está permitido hacer "ff_cstring = gv_struc."

¿Cómo puedo cambiar el código para que el valor hexa siga siendo el mismo, 0C?

En todas las variantes que he probado, el valor hexa cambia, incluso si el valor sigue siendo #.

¿Me puedes ayudar por favor?

Muchas gracias,

Monika

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

4 Respuestas

0
Loading...

Hola Monika,

Parece que tienes un programa heredado que movió un valor de byte (0c) a un campo CHAR. Esto funcionaba en sistemas no Unicode (ya que los campos CHAR y HEX tenían un tamaño idéntico, y 0C era un carácter de control válido), pero no puede funcionar en sistemas Unicode: En un sistema Unicode, un campo CHAR 1 tiene un ancho de 2 bytes. Sin embargo, un campo HEX1 sigue siendo de un byte. Por lo tanto, no puede haber una conversión canónica de CHAR1 a HEX1.

Los caracteres en sistemas Unicode están representados por la codificación UTF-16, que requiere 2 bytes por carácter. Ahora, un 0C en un sistema no Unicode representa un carácter de avance de formulario. En la codificación UTF-16 de un sistema Unicode, un carácter de avance de formulario sería U+000C, que se codifica binariamente como 000C (big-endian, página de códigos SAP 4102) o 0C00 (little-endian, página de códigos SAP 4103), dependiendo de la arquitectura de tu hardware.

Puedes usar un field-symbol para mover los 2 bytes de un campo Type X (¡con longitud = 2!) a un campo CHAR1 en Unicode. Pero asegúrate de usar el orden de bytes correcto para representar tu carácter especial en el campo X.

Saludos,

Alex

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

¡Roberto, gracias por tu ayuda rápida!

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

Hola.

Prueba esta solución

CLASE cl_abap_container_utilities DEFINICIÓN CARGA .

LLAMADA MÉTODO cl_abap_container_utilities => fill_container_c

EXPORTANDO

im_value = gv_struc

IMPORTANDO

ex_container = ff_cstring

EXCEPCIONES

illegal_parameter_type = 1

OTROS = 2 .


Espero haber ayudado

Adiós

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

Hola.

Prueba esta solución

CLASE cl_abap_container_utilities DEFINICIÓN CARGA .

LLAMADA MÉTODO cl_abap_container_utilities => fill_container_c

EXPORTAR

im_value = gv_struc

IMPORTAR

ex_container = ff_cstring

EXCEPCIONES

illegal_parameter_type = 1

OTROS = 2 .


Espero haberte ayudado

Adiós

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?