[FUNCION] IsUnicode (Determina si una cadena contiene caracteres unicode o no)

Iniciado por 79137913, 18 Noviembre 2013, 14:13 PM

0 Miembros y 4 Visitantes están viendo este tema.

79137913

HOLA!!!

Uso un caracter RLO(202E):
http://www.fileformat.info/info/unicode/char/202E/index.htm

Tenes varias maneras para conseguir los caracteres Unicode, yo lo que hago es copiarlos de algun texto que lo contenga, o con el mapa de caracteres, luego lo copias y lo pegas donde quieras.-

Desde VB podes usar ChrW(8238) para generar el Caracter RLO (8238 = 202E)

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

burbu_1

entiendo el sentido que has dado a la función  ;-) ;-) ;-)

pero creo que  no sirve para estos símbolos.... ya que el 2º byte no es un 0 y los chinos tambien usan vb

saludos

Danyfirex

Cita de: Karcrack en 18 Noviembre 2013, 19:13 PM
Ese array quedaría como cadena ASCII en memoria. Si intercalas un byte nulo entre cada carácter sería UNICODE.

@Karcrack me refiero a este que coloca 79137913 seria UNICODE. no ASCII.

Código (vb) [Seleccionar]
'esta seria ASCII
   cadenaASCII(0) = Asc("H")
   cadenaASCII(1) = 0
   cadenaASCII(2) = Asc("o")
   cadenaASCII(3) = 0
   cadenaASCII(4) = Asc("l")
   cadenaASCII(5) = 0
   cadenaASCII(6) = Asc("a")
   cadenaASCII(7) = 0
   cadenaASCII(8) = 0
   cadenaASCII(9) = 0

?


@79137913  ya entendí el propósito de la función esta muy buena.

entonces si usas GetModuleFileNameW ya sabes que el carácter sera unicode. así diga "hola"  o "Unicode ▀gpj"

básicamente lo que haces es deformar la cadena unicode. porque le estas quitando el segundo byte. aunque igual el vb6 le seguirá agregando el byte nulo automáticamente(exepto en el caracter unicode 8238 q lo estas convirtiendo en "R") porque Aux sigue siendo de tipo string.


saludos

79137913

HOLA!!!

Exacto chicos, ya entendieron para que sirve :D.

Determina si algun caracter de la cadena es unicode y no puede ser transformado a ascii.-

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Karcrack

Ya entiendo :-[

En ese caso sería mucho mejor y de coste constante hacer esto:
Código (vb) [Seleccionar]
Private Function IsUnicode(ByRef s As String) As Boolean
   IsUnicode = (Len(s) <> LenB(s))
End Function

79137913

HOLA!!!

No, Karcrack, es extraño que diga esto pero tu enfoque esta errado...

TODAS las cadenas de Vb6 son almacenadas como Unicode por ende siempre LenB sera el doble de Len. Por ende tu funcion siempre da Verdadero.-

Eso de los Arrays que daban como ejemplo solo desvirtua el tema.

--------------------------------------------------------------------------------------------------

A tomar en cuenta, Mi funcion como dicen antes lo que hace es Copiar erroneamente las cadenas unicode a una nueva cadena, la cual difiere si hay algun caracter que ocupe mas de un byte, como veras en la parte del for (Step 2 y CHR), pierdo el segundo byte de cada caracter y ademas lo convierto con la funcion Chr que no devuelve mas que ascii.-

No quiero decir en ningun momento que las cadenas que se evaluan estan guardadas o no como Unicode, el alma de la funcion es ver si la cadena que se entrega es imprimible o no en ascii.-

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Karcrack

Tienes toda la razón. Me he contradicho a mí mismo entre el primer comment que hice y éste jaja No doy pie con bola xD

Aquí está todo explicado:
http://support.microsoft.com/KB/138142

Danyfirex

cuando dije deformas no lo dije en mal sentido :) (por si lo tomaste a mal)


y gracias por la función realmente es muy útil.

saludos sietenueveunotressietenueveunotres(79137913)  ;D