Widestring à la conversion de chaîne en Delphi 7

mon application est un non-unicode application écrite en Delphi 7.

Je voudrais convertir les chaînes unicode en ANSI avec cette fonction :

function convertU(ws : widestring) : string;
begin
  result := string(ws);
end;

J'utilise également ce code pour définir le droit de codes à convertir.

initialization
  SetThreadLocale(GetSystemDefaultLCID);
  GetFormatSettings;

Il fonctionne très bien dans la VCL thread principal, mais pas dans un TThread,
lorsque je reçois des questions de marques '?' comme résultat de la fonction convertU.

Pourquoi pas dans un TThread ?

  • Tout d'abord, vous n'avez pas besoin d'une fonction ou d'un transtypage pour ce faire; un simple stringVar := wideStringVar; fonctionne. Deuxièmement, le problème est que pas toutes les WideChars sont directement convertibles en un AnsiString; certains le sont plus que d'un caractère dans la largeur, et certains ont des valeurs de caractère qui ne sont pas représentable dans un AnsiChar, et certaines polices ne contiennent pas tous les possibles valeurs Unicode. Si vous voyez ?, cela signifie que vous êtes l'affichage, ce qui pourrait être le troisième problème - fils ne doivent pas accéder aux contrôles d'interface utilisateur graphique sans utiliser Sychronize. Puisque vous n'avez pas de poste le code complet, il est difficile de dire si c'est le cas.
  • La question est : pourquoi dois-je obtenir des points d'interrogation dans le cas de TThread ?
  • Je le répète: Si vous voyez ?, vous êtes à l'affichage du texte. Vous avez fournis, zéro code ou d'information concernant la façon dont vous êtes l'afficher.
  • J'ai un regard sur les valeurs renvoyées avec le débogueur
  • Est un TThread conscient de la valeur par défaut du système LCID ?
  • ? est ce que vous obtenez lors de la conversion d'un codepoint Unicode à MBCS échoue. Puisque vous parlez du contenu d'un AnsiString, et depuis ? Est dans la commune de la plage ASCII, nous pouvons exclure bugs d'affichage.

InformationsquelleAutor user382591 | 2012-09-09