Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2025
MarceloMit MarceloMit is offline
Registrado
NULL
 
Registrado: jul 2015
Posts: 1
Poder: 0
MarceloMit Va por buen camino
Beta: Usar Unicode UTF-8 para soporte de lenguaje mundial

Hola!

Mi aplicación Delphi (10.4 o superior) corre exclusivamente para idioma español, en América Latina, y encuentra problemas de funcionamiento para interpretar strings cuando el entorno Windows tiene definida la opción "Beta: Usar Unicode UTF-8 para soporte de lenguaje mundial". ¿Cómo puedo hacer para que dicha opción no afecte a mi aplicación?. Muchas gracias!
Responder Con Cita
  #2  
Antiguo 12-03-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
El problema que mencionas ocurre porque cuando la opción "Beta: Usar Unicode UTF-8 para soporte de lenguaje mundial" está activada en Windows, el sistema cambia el codepage predeterminado a UTF-8. Esto afecta cómo Delphi maneja cadenas en componentes VCL y en la interacción con APIs de Windows, especialmente si la aplicación asume que el codepage es ANSI.

Soluciones posibles:
1. Forzar el uso del Codepage ANSI en la aplicación
Puedes establecer explícitamente el codepage ANSI en el inicio de la aplicación. Para ello, usa:

Código Delphi [-]
uses
  System.SysUtils, Windows;

begin
  SetThreadLocale(LOCALE_SYSTEM_DEFAULT);
  SetConsoleOutputCP(1252);  // Para Latinoamérica (Windows-1252)
  SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, '1252');
end.

Esto obliga a que la aplicación utilice el codepage estándar para español latinoamericano.

2. Evitar dependencias de ANSI y trabajar en Unicode nativo
Si tu código aún usa AnsiString o String en versiones antiguas, conviene hacer una migración a UnicodeString (que es el String predeterminado en Delphi 10.4). Evita conversiones innecesarias entre Unicode y ANSI.

3. Usar TEncoding para conversiones de texto
Si necesitas manipular archivos o comunicación con la base de datos, usa TEncoding para asegurarte de que las cadenas se procesen correctamente:

Código Delphi [-]
var
  TextoUTF8: TBytes;
  TextoStr: string;
begin
  TextoUTF8 := TEncoding.UTF8.GetBytes('Texto en UTF-8');
  TextoStr := TEncoding.ANSI.GetString(TextoUTF8); // Convertir a ANSI
end;

Si interactúas con bases de datos, asegúrate de que estén configuradas correctamente para Unicode o usa conversiones adecuadas.

4. Modificar el manifest de la aplicación
Si la opción de Windows está activada y afecta la compatibilidad de tu aplicación, puedes evitar que Windows la fuerce editando el manifest de la aplicación.

Abre el archivo .dproj de tu proyecto.
Busca la sección <dpiAware> y añade esta línea dentro de <application>:

Código:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <compatibility>
        <application>
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
        </application>
    </compatibility>
    <windowsSettings>
        <activeCodePage enabled="false"/>
    </windowsSettings>
</application>
Esto le indica a Windows que tu aplicación no es compatible con cambios automáticos de codepage.

Recomendación
Si no puedes controlar la configuración de Windows en todas las máquinas, la mejor opción es hacer que tu aplicación trabaje completamente en Unicode (String = UnicodeString), evitar AnsiString, y usar TEncoding para conversiones cuando sea necesario.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Nueva Aplicación Web, ¿Lenguaje a usar? rabata2001 Internet 6 27-03-2013 16:42:36
porque usar Delphi y no otro lenguaje flashtkd Varios 20 11-03-2010 11:40:23
Que Lenguaje Usar? jorllazo Debates 50 09-03-2010 21:21:35
Alternativa a TEXTOUT que soporte Unicode MDSato Gráficos 10 20-03-2007 13:36:59


La franja horaria es GMT +2. Ahora son las 15:14:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi