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: [email protected]
[mailto:[email protected]] 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
<[email protected]<mailto:[email protected]>> 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:
[email protected]<mailto:[email protected]>
[mailto:[email protected]<mailto:[email protected]>]
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
<[email protected]<mailto:[email protected]>> 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.