Duda con Unicode

3 views
Skip to first unread message

aguml

unread,
Jun 14, 2020, 5:15:10 PM6/14/20
to CyC++ Buenos Aires
Mi principal duda es si Unicode, UTF-8 o UTF-16 y WideString ().c_bstr() sería lo mismo o si no tiene nada que ver y si es así ¿Como paso de WideString a Unicode? Es para hacer búsquedas en Unicode. Si hubiese que hacer una búsqueda Unicode en un archivo, tanto binario como texto plano ¿Cuál debería usar?

RFOG

unread,
Jun 15, 2020, 6:02:38 AM6/15/20
to cp...@googlegroups.com

El dom., 14 jun. 2020 a las 23:15, aguml (<ag...@hotmail.com>) escribió:
Mi principal duda es si Unicode, UTF-8 o UTF-16 y WideString ().c_bstr() sería lo mismo o si no tiene nada que ver y si es así ¿Como paso de WideString a Unicode? Es para hacer búsquedas en Unicode. Si hubiese que hacer una búsqueda Unicode en un archivo, tanto binario como texto plano ¿Cuál debería usar?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/cppba/9744de0f-395a-4f4c-9e79-ededb1d2d512o%40googlegroups.com.

RFOG

unread,
Jun 15, 2020, 6:03:03 AM6/15/20
to cp...@googlegroups.com

aguml

unread,
Jun 16, 2020, 1:56:53 AM6/16/20
to CyC++ Buenos Aires
Gracias por la ayuda, ya conseguí pasar del texto de un TEdit a UTF-8 con esta función: https://docs.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar
Ahora tengo más dudas porque según leo WideWtring usa UTF-16 y no soy capaz de meter el contenido del Edit en un char* usando esa función aunque veo que UTF-16 vale 1200 y ponga ese valor no me funciona:
https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers

aguml

unread,
Jun 16, 2020, 1:59:35 AM6/16/20
to CyC++ Buenos Aires
El tema de meterlo en un char* o BYTE* o UCHAR* es porque con esa cadena voy a hacer una búsqueda binaria en un archivo byte a byte y eso no puedo hacerlo con un wchar_t.

Rafael Ontivero

unread,
Jun 16, 2020, 2:21:25 AM6/16/20
to cp...@googlegroups.com
Pues si no necesitas convertir, asigna el puntero y listo

auto puntero=reinterpret_cast<char *>(cadena.str());

O la forma que tengas de obtener el puntero desnudo de cadena

> El 16 jun 2020, a las 7:59, aguml <ag...@hotmail.com> escribió:
>
> El tema de meterlo en un char* o BYTE* o UCHAR* es porque con esa cadena voy a hacer una búsqueda binaria en un archivo byte a byte y eso no puedo hacerlo con un wchar_t.
>
> --
> --
> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
> En caso de duda visita "http://groups.google.com/group/cppba"
> ---
> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un...@googlegroups.com.
> Para ver este debate en la Web, visita https://groups.google.com/d/msgid/cppba/c8316ed2-d857-44a9-ae70-ebd4ea73846ao%40googlegroups.com.

RFOG

unread,
Jun 16, 2020, 4:40:35 AM6/16/20
to cp...@googlegroups.com
Me parece que estás matando moscas a cañonazos.

A ver, si quieres buscar dentro de un fichero sin entender el formato, usa ifstream abriendo en binario, lees y buscas. No hay más. Y si quieres más rendimiento en Windows, CreateFile, ReadFile con overlays.

(Otra cosa es que te pidan buscar "hola mundo" pudiendo estar en disco en fichero de texto en Ansi, MBCS, Unicode-8, Unicode-16 e incluso Unicode-32 (que no creo que use nadie). En ese caso tienes que verificar en qué formato está guardado el archivo de texto, lo que se hace (por ejemplo el notepad de windows) leyendo parte del fichero en cada uno de esos encodings y comprobando si no hay cosas binarias. lees en Ansi, encuentras ceros o caracteres no alfanuméricos, descartas, lees lo mismo en MBCS, encuentras ceros o caracteres no alfanuméricos, descartas, lees lo mismo en UTF-8... Teniendo en cuenta que por ejemplo en ANSI has de considerar las páginas de códigos y lo que en cp850 es basura, son letras válidas en cp437, etc).

RFOG

unread,
Jun 16, 2020, 4:46:10 AM6/16/20
to cp...@googlegroups.com
Y olvídate de la puta mierda del C++Builder, eso solo sirve para RAD (y no muy complejo, porque como compliques la interfaz va a empezar a hacer cosas raras a la voz de ya). No deja de ser un Delphi "a la" C++ y poco más... Te lo dice alguien que ha currado en Embarcadero.

Ya existe una herramienta como lo que estás haciendo, al menos en Windows, se llama grepWin y aquí tienes el código fuente: https://github.com/stefankueng/grepWin

Está en C++. Y aquí la página web del autor: https://tools.stefankueng.com/grepWin.html

aguml

unread,
Jun 16, 2020, 1:22:33 PM6/16/20
to CyC++ Buenos Aires
Guau justo lo que necesitaba 😱. Gracias.
Reply all
Reply to author
Forward
0 new messages