Es posible que sea más sencillo (te recuerdo que no domino muy bien esto de las 
codificaciones) pero lo que necesito es que la variable ‘jstr’ sea un objeto 
String de Java y esa cadena pasarla a un método de Java, que es el que realiza 
el trabajo sucio con la cadena.

Un lío fruto de mi desconocimiento.

Me anoto tu sugerencia para probarla. Ya comento el resultado.

Gracias, Alex.

De: forum.help400-boun...@listas.combios.es 
[mailto:forum.help400-boun...@listas.combios.es] En nombre de Alex Martínez
Enviado el: miércoles, 5 de julio de 2017 11:26
Para: forum.help400
Asunto: Re: Java, ILE RPG y Unicode

Hola de nuevo

¿y todo esto que haces no será más sencillo con esto  ?

he probado a definir jstr indicando el CCSID 13488 y también funciona

D jstr            s             25C   varying CCSID(1200)
D a               s              1c   inz(U'2082')
D b               s              1c   inz(U'2074')

   jstr = %ucs2('H') + a + %ucs2('SO') + b ;

El 5 de julio de 2017, 10:13, Javier Mora 
<jm...@musgrave.es<mailto:jm...@musgrave.es>> escribió:
Hola Alex,

por lo que he estado leyendo UCS es equivalente a Unicode. En las pruebas que 
he realizado, CCSID(*UTF16) no se puede utilizar con un CHAR VARYING,  sólo lo 
he podido asociar a un tipo C VARYING. También he comprobado que (en 7.2) el 
sistema realiza conversión automática entre campos UTF-8 y UTF-16.

Mi problema original era generar una cadena de caracteres con codificación 
Unicode y pasarla por parámetro a un método de Java (siempre desde RPG). El 
ejemplo que me pasaste funcionaba al contrario, pero me dio la pista para 
cambiar algunas cosas en mi código. Después de algunas pruebas, definiendo los 
parámetros como tipo C (¿UCS?) y CCSID(*UTF16), tanto en procedimientos RPG 
como en los métodos Java, ¡¡parece que funciona!! (aunque todavía no entiendo 
muy bien por qué).

Básicamente con,

     D JC_STRING       C                   'java.lang.String'

     D jstring         S               O   Class( *JAVA: JC_STRING )
     D utf_str         S            128C   Varying CCSID(*UTF16)
     D jstr            S                   Like( JString )

     D new_UnicodeString...
     D                 PR                  Like( jstring )
     D                                     ExtProc( *JAVA:
     D                                       JC_STRING:
     D                                       *CONSTRUCTOR )
     D   bytes                     2048C   Const Varying
     D                                           Ccsid( *UTF16 )

        utf_str = 'H' + U'2082' + 'SO' + U'2074';
        jstr = new_UnicodeString( utf_str );

        // ‘jstr’ ya tiene la secuencia en Unicode

parece que funciona.

Tampoco tengo muy claro para qué sirve la BIF %ucs2 y si es útil en 7.2, ya que 
parece que el compilador se encarga de las conversiones. Si quiero poner en la 
cadena Unicode un símbolo que no se puede expresar con EBCDIC utilizo la 
secuencia U’hhhh’, donde hhhh es la codificación del símbolo.

Lo dicho, no entiendo muy bien por qué funciona, pero lo hace.

Saludos,

Javier Mora

De: 
forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es>
 
[mailto:forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es>]
 En nombre de Alex Martínez
Enviado el: miércoles, 5 de julio de 2017 8:07

Para: forum.help400
Asunto: Re: Java, ILE RPG y Unicode

Hola

yo tambien me pierdo...... jajajaja pero para la pregunta complicada creo que 
siempre puedes usar una cadena en hexadecimal y combinarlo con la funcion %ucs2

val = x'2074' + %ucs('hola datos') + x'2082'

en vez de definirla como VARCHAR prueba con VARYING con CCSID 1200 para que sea 
UTF-16 según el manual o usando free para la hoja D como varucs2 que era lo que 
te indicaba en el ejemplo anterior

D val             s           2000C   varying  CCSID(1200)

https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/rtref/datatypecompatibility.htm



El 4 de julio de 2017, 20:33, Javier Mora 
<jm...@musgrave.es<mailto:jm...@musgrave.es>> escribió:
Gracias Alex por tu interés.

Te respondo primero a la pregunta que no entiendes. Por ejemplo la codificación 
de un “2 subíndice” es \u2082 (https://unicode-table.com/es/2082/) o la 
codificación de un “4 subíndice” es \u2074 
(https://unicode-table.com/es/2074/). Lo que necesito es mezclar este tipo de 
símbolos con caracteres del alfabeto y traspasarlo a un método Java que espera 
una String.

No sé si he sido capaz de explicarme.

En este caso, realmente necesito utilizar Unicode para usar determinados 
símbolos que necesito.

Voy a probar lo que me indicas.

Lo que más me confunde de todo es el lío entre Unicode, UTF-8, UTF-16, UTF-32, 
UCS, etc.

Una cosa que he probado ha sido definir una cadena (VARCHAR) con UTF-16, pero 
no me deja. En cambio si me deja con ¿UCS?

Cómo puedes apreciar voy un poco perdido.

Gracias de nuevo.

Javier Mora

De: 
forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es>
 
[mailto:forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es>]
 En nombre de Alex Martínez
Enviado el: martes, 4 de julio de 2017 19:20
Para: forum.help400
Asunto: Re: Java, ILE RPG y Unicode

Hola

En V7R2 puedes utilizar la función GetBytes con CCSID(*UTF8) y recibir el valor 
en una variable de tipo varucs2
dcl-pr getbytes varchar(65535) ccsid(*utf8)
extproc(*java : 'java.lang.String' : 'getBytes');
end-pr;
dcl-s val varucs2(65535);
val = getbytes (str);

El ejemplo es de https://archive.midrange.com/midrange-l/201608/msg00404.html


para mezclar con texto normal puedes usar la funcion %char (no le veo mayor 
problema)

y no acabo de entender la pregunta ¿Cómo puedo obtener en RPG un determinado 
símbolo Unicode si conozco su código?

No sé si lo que necesita es un simple variable = %ucs2('hola caracola')

Salu2

El 4 de julio de 2017, 16:07, Javier Mora 
<jm...@musgrave.es<mailto:jm...@musgrave.es>> escribió:
Hola a tod@s,

necesito utilizar símbolos Unicode en un programa RPG que utiliza unas 
bibliotecas de Java. Sé que en Java se puede incluir símbolos Unicode en una 
cadena de caracteres con \uhhhh (donde hhhh es el valor hexadecimal del 
símbolo). Pero esta fórmula no la puedo utilizar en RPG (al menos no he 
sabido). Tampoco tengo un conocimiento muy profundo de Java, ni de Unicode ni 
cómo utilizarlo desde RPG.

¿Cómo puedo obtener en RPG un determinado símbolo Unicode si conozco su código?
¿Cómo lo mezclo con texto normal?
¿Cómo le indico en el prototipo del método Java que el texto es Unicode?

He rebuscado por Internet pero no entiendo lo que leo. ¿Alguna ayuda o pista?

Javier Mora

____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.


____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.


____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

Responder a