Autor
|
Tema: [FUNCION] IsUnicode (Determina si una cadena contiene caracteres unicode o no) (Leído 8,927 veces)
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!! En fin esta funcion lo que hace es determinar si una cadena contiene caracteres unicode (si contiene unicode envia true sino false) Ustedes diran... para que sirve esto, bueno, resulta que hay apis que solo soportan entrada ascii, entonces conesto prevenimos crasheos, en el ejemplo que arme hay un archivo con nombre de fichero unicode (un caracter RLO 202E). Private Function IsUnicode(expression As String) As String 'by 79137913 Dim b() As Byte 'Se crea un array de bytes para almacenar el string Dim Aux As String 'se usara para comparar b = expression 'se usa un evil type convert para obtener todos los ascii de los caracteres de la expresion en las posiciones del array For x = 0 To UBound(b) Step 2 Aux = Aux & Chr(b(x)) 'reconstruimos la expresion Next IsUnicode = (expression <> Aux) 'asignamos a IsUnicode el resultado de la comparacion 'Si expression es = a aux dara Falso por que expression es totalmente Ascii, sino dara Verdadero por que contiene algun caracter Unicode. End Function
El ejemplo lo descargan de aca: http://www.mediafire.com/download/76yuudmsnnoykau/IsUnicode.rarGRACIAS POR LEER!!!
|
|
« Última modificación: 18 Noviembre 2013, 16:33 pm por 79137913 »
|
En línea
|
"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
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Private Function IsUnicode(ByRef sStr As String) As Boolean IsUnicode = True End Function
Todas las cadenas de VB6 son UNICODE. Tú lo que estás comprobando es que no se haya hecho una doble conversión UNICODE->UNICODE. Una forma más simple de hacer esa comprobación es con StrConv. Si pasas la cadena como ByVal a un API ésta será convertida automáticamente a ASCII y se pasará el puntero. Si la pasas como ByRef se pasará la referencia al BSTR. Si lo que quieres pasar es una referencia a la cadena en UNICODE puedes usar StrConv() o bien pasar el argumento como ByVal Long y usar StrPtr(). ¿Qué código te genera esa cadena malformada?
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
Yo lo veo de esta forma a ver si estoy correcto. seria ASCII si es un byte array Dim cadenaASCII(4) As Byte Dim cadenaUnicode As String 'esta seria ASCII cadenaASCII(0) = Asc("H") cadenaASCII(1) = Asc("o") cadenaASCII(2) = Asc("l") cadenaASCII(3) = Asc("a") cadenaASCII(4) = 0 'esta seria Unicode cadenaUnicode = "Hola" ' con doble terminacion nula.
corrijanme si me equivoco saludos
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!! Gracias Karcrack! Ningun codigo genera cadena malformada, pero por ejemplo yo quiero abrir un archivo con un caracter unicode en su path y eso hace crashear a las apis... Fijate El ejemplo que puse ahi lo vas a entender.- Dany, para que sea mas correcto deberias usar 2 posiciones del array por caracter, en la primera su ascii y en la segunda 0, al final 0 0 Osea: Dim cadenaASCII(9) As Byte Dim cadenaUnicode As String '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 'esta seria Unicode cadenaUnicode = "Hola" ' con doble terminacion nula.
GRACIAS POR LEER!!!
|
|
« Última modificación: 18 Noviembre 2013, 16:35 pm por 79137913 »
|
En línea
|
"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
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Entonces estás usando versiones ASCII de las APIs... Llama a la versión UNICODE. No entiendo como te ayudaría esta función a llamar a esas APIs ASCII...
@Danyfirex: cadenaASCII será ASCII siempre pero cadenaUNICODE estará en memoria como UNICODE y dependiendo de qué hagas con ella se transformará o no.
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
@ ahora si me confundí :S '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
me parece que de esa forma se structura las cadenas unicode 2 byte por carácter y en Ascii un byte por carácter. o no ? @Karcrack por eso digo que esta byte array quedaria en memoria como una cadena unicode o no?
|
|
« Última modificación: 18 Noviembre 2013, 17:46 pm por Danyfirex »
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!! Entonces estás usando versiones ASCII de las APIs... Llama a la versión UNICODE. No entiendo como te ayudaría esta función a llamar a esas APIs ASCII...
@Danyfirex: cadenaASCII será ASCII siempre pero cadenaUNICODE estará en memoria como UNICODE y dependiendo de qué hagas con ella se transformará o no.
Esta funcion la uso para llamar a las unicode cuando corresponde y a las ascii cuando corresponde.- Aunque podria siempre llamar a la unicode pero no me agrada la idea.- GRACIAS POR LEER!!!
|
|
|
En línea
|
"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
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
@Karcrack por eso digo que esta byte array quedaria en memoria como una cadena unicode o no?
Dim cadenaASCII(4) As Byte Dim cadenaUnicode As String 'esta seria ASCII cadenaASCII(0) = Asc("H") cadenaASCII(1) = Asc("o") cadenaASCII(2) = Asc("l") cadenaASCII(3) = Asc("a") cadenaASCII(4) = 0
Ese array quedaría como cadena ASCII en memoria. Si intercalas un byte nulo entre cada carácter sería UNICODE.
|
|
|
En línea
|
|
|
|
LeandroA
|
Buena 79137913, una pregunta como haces para ponerle ese nombre en unicode a los archivos?
|
|
|
En línea
|
|
|
|
burbu_1
Desconectado
Mensajes: 159
hamen gaoz
|
Buena 79137913, una pregunta como haces para ponerle ese nombre en unicode a los archivos?
prueba con alt + 0160
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Si contiene unos caracteres
PHP
|
dimitrix
|
7
|
2,970
|
8 Septiembre 2008, 22:46 pm
por dimitrix
|
|
|
Buscar cadena UNICODE en un exe
Programación C/C++
|
Riki_89D
|
4
|
2,471
|
30 Mayo 2010, 20:36 pm
por Riki_89D
|
|
|
Sumar el numero de “a” que contiene la cadena asignada a una función [python]
Programación General
|
bichotg
|
5
|
3,945
|
22 Febrero 2012, 04:33 am
por Novlucker
|
|
|
C++ funcion que retorne una cadena de caracteres
Programación C/C++
|
yokino
|
2
|
5,405
|
25 Julio 2012, 18:00 pm
por yokino
|
|
|
Cadenas de caracteres. Función para comparar una cadena ignorando signos. C++
Programación C/C++
|
seryioo
|
1
|
4,039
|
12 Agosto 2015, 13:50 pm
por ivancea96
|
|