12
votes

DelphI2010: code d'écriture pour attribuer des légennes contenant des valeurs littérales Unicode ou charger des symboles Unicode à partir du fichier texte?

Comment créer un programme Unicode à Delphi 2010?

J'ai des fenêtres anglaise et "langue actuelle pour les programmes non unicode" est aussi l'anglais. Les contrôles statiques ont l'air bien, mais si j'essaie de les changer (label.caption: = 'Valeur Unicode' ou mémo.loadFomfile (TextFileName)) Le texte ressemble à: $ ^ $ &% * (# & p>

Comment le réparer?


12 commentaires

-1. Tous les programmes sont des programmes Unicode à Delphi 2010. Si vous obtenez des ordures, il y a encore plus à votre problème que vous devez décrire ici. Vous devez décrire ce que vous avez fait, que se passe-t-il et ce que vous attendiez à la place. Précisez s'il vous plaît. Publier du code. Publiez des images, si vous en avez besoin.


Toutes les applications Delphi 2010 sont unicode. De plus, toutes les versions de Windows dans lesquelles des applications Delphi 2010 peuvent exécuter (je pense - au moins toutes les versions non anciennes de Windows) sont Unicode. Vous faites quelque chose de très faux. Veuillez nous donner un projet minimal affichant les problèmes que vous observez.


Facile, les gars. Ceci est un nouvel utilisateur. Il n'a pas besoin d'être évité et à proximité pour une question comme celle-ci; Il doit modifier la question et donner une réponse plus claire.


@ Mason: Ce n'est pas si mal. Personne ne peut répondre à la question tel qu'il se trouve et que l'OP peut toujours le modifier. SI (S), il ne sera pas long avant qu'il ne soit à nouveau ouvert.


J'ai trouvé un problème. Le premier projet que j'ai créé avec d'autres paramètres de langue Windows, puis j'ai modifié les paramètres dans Windows. Delphi a enregistré tout un texte de projet non dans UTF-8. Pourquoi! Je n'ai juste pas sauvé le projet et j'ai rouvert-le et j'ai vu que tous les personnages ont été changés. Pourquoi Unicode Delphi ne sauf pas dans utf-8 ??? ...


@ Mason, cette question devrait voté à la fois. C'est une question moche et sans réponse. Si Michael édite cela pour en faire une bonne question, je voterai. Je voterai également pour le ré-ouvrir, mais encore une fois, seulement après c'est une question décente.


Michael, si vous souhaitez demander pourquoi Delphi enregistre des fichiers avec un codage particulier, veuillez poster une nouvelle question à ce sujet. Je ne pense pas que cela soit lié à la question que vous avez dans cette question , mais je vous demanderai de nouveau de vous plaire à cette question pour clarifier exactement quel problème vous êtes ayant.


@Rob: je suis en désaccord. Vous êtes ici ici depuis des années. Vous ne pouvez pas tenir un débutant sur les mêmes normes de qualité que vous aspirez dans votre propre écriture et gifler toutes sortes d'effets négatifs sur leurs postes s'ils ne se distinguent pas. Cela crée une communauté hostile que de nouvelles personnes ne veulent pas venir participer.


Stackoverflow a besoin d'un moyen de télécharger un bowvote. Allez les gars, cela prend des "lourds" à un nouveau niveau et non de bon sens. Merci aux dieux que je n'avais pas "utile" des gens comme vous, lorsque je trouvais mon chemin à Delphes.


Merci tout le monde pour avoir aidé. Comme je suis triste, Delphi 2010 a sauvé le projet de l'UTF-8, je suis converti en UTF-8 et tous ont commencé à travailler!


Oui, @Deltictics, peut-être qu'il doit y avoir une autre façon de montrer un désaccord avec un vote en baisse. Comme il se trouve maintenant, il semble que trois personnes pensent réellement que c'est une question clair et utile qui montre l'effort de recherche que je ne vois vraiment pas. Cependant, je pense que le commentaire que j'ai donné lorsque j'ai voté sur cette question était utile parce que j'ai expliqué ses lacunes, mais cela se produit maintenant pour moi que j'avais encore plus utile en rappelant Michael qu'il pouvait éditer la question et en mentionnant que L'amélioration de la question pourrait changer mon vote.


J'ai changé le titre de la question et j'ai fixé la grammaire.


3 Réponses :


19
votes

Bienvenue sur Stackoverflow. Veuillez indiquer votre code lorsque vous avez un tel problème. Je vais expliquer les sources les plus probables du problème comme celui que vous voyez, mais je ne peux pas vous aider à résoudre ce problème si vous ne publiez pas votre code. De plus, je dois faire beaucoup d'hypothèses parce que vous m'avez demandé de deviner presque tout sur votre question, c'est pourquoi elle s'est fermée. J'espère que vous donnerez plus de détails à l'avenir et nous pouvons éviter les questions fermées.

Permettez-moi de supposer un tas de choses parce que vous ne m'avez pas donné de nombreuses données. p>

  1. Vous avez déjà utilisé Delphi et vous connaissez les noms de type fondamentaux tels que String, Char, etc. P> Li>

  2. Vous ne pouvez pas être au courant des différences Unicode entre DELPHI 2007 (Char = ansichar / String = Ansistring) et Delphi 2009-ou ultérieur (y compris Delphi 2010 et XE) où Char = Unicodechar et String = UnicodeString . P> li>

  3. la raison la plus courante que vous verriez les ordures (représentées dans votre question comme le texte ressemble à $ ^ $ &% * (# & #. " code>) est si vous avez essayé de Manipulez directement des données d'ansicharacter de taille d'octets et le contraindre de manière erronée dans une unité unicodetring. P> li>

  4. MJN a également remarqué, de l'un de vos commentaires que vous rencontrez également des problèmes avec le code source contenant des caractères Unicode qui n'ont pas été enregistrés sous forme de fichier UTF8 ... lorsque j'essaie de mettre des caractères unicode dans un fichier source Delphi me demande automatiquement cette question, que je suppose que vous voyez aussi et répondez correctement (la réponse correcte est oui) ... mais votre question ne mentionne pas du tout cela, vous devriez vraiment essayer de mettre à jour votre question pour spécifier la source. de votre problème. p> li> ol>

    Entrez l'image Description ici p>

    Voici le clic droit Menu Format de fichier, à partir duquel vous pouvez modifier le codage à tout moment, la valeur recommandée est UTF8 comme indiqué ici: p>

     Entrez la description de l'image ici p>

    Vous devez définitivement publier le code concerné qui génère les valeurs de chaîne incorrectes. Vous devriez commencer, non pas avec une application géante que vous essayez de porter à Unicode Delphi (qui est la quatrième et la plus grande hypothèse que je fais ici) et plutôt, commencez par un petit code d'échantillon. P>

    Voici Un exemple de "code mal écrit", qui arrive encore à travailler dans Delphi 7, car chaque caractère est un octet de taille, mais cette hypothèse ne se déplace pas à 2009 et Xe Delphi: P>

    c := #$21CC; // U+21CC
    


0 commentaires

7
votes

Les commentaires

Pourquoi Unicode Delphi sauve-t-elle pas UTF-8?

et

Delphi 2010 a sauvé le projet non Dans UTF-8, j'ai converti en UTF-8 et tous ont commencé à travailler

semble être lié au codage des fichiers de code source du projet Delphi (DPR et / ou PAS). S'ils sont définis sur ANSI par exemple, les caractères n'appartenant pas à la page de code actuel peuvent être enregistrés de manière incorrecte.

L'IDE (à Delphi 2009 au moins) crée de nouvelles unités avec le format de fichier défini sur ansi . Pour le code source de langage mixte, UTF-8 (ou l'une des saveurs UCS) doit être activée manuellement, à l'aide du menu contextuel de l'éditeur de texte (format de fichier | UTF8).

L'IDE (à Delphi 2009) semble également ne pas avoir d'option pour définir le format de texte par défaut à autre chose que l'ANSI. (Voir Comment peut-on J'ai défini le format de fichier par défaut dans l'IDE Delphi vers UTF8? )


La réponse courte:

Définissez le format de fichier pour votre code source sur UTF-8.

(l'IDE Delphi 2009 n'utilise pas Unicode par défaut, je suppose que cela est toujours le même à DELPHI 2010)


1 commentaires

J'ai pris la liberté d'éditer la question de l'OP, de faire au moins le titre de la question Saner.



0
votes

Si vous avez migré votre projet d'une ancienne version Delphi, vérifiez la police utilisée dans vos boîtes de dialogue. Toutes les polices ne prennent pas en charge tous les caractères Unicode.

J'ai eu un problème, apparemment similaire à la vôtre: j'avais des chaînes unicode correctes dans le débogueur, mais dans l'application, certains des caractères spéciaux sont apparus sous forme de carrés noirs. C'était avec un ancien programme migré de Delphi 6 où certaines légendes sont définies par le code. Sur de nouvelles formes Tout allait bien (les légendes ont été définies dans l'éditeur de dialogue, mais cela n'est pas réellement pertinent).

Le problème était la police de toutes les formes migrées. Delphi 6 utilisait "MS Sans Serif" comme police. Mais cette police manque la plupart des caractères Unicode. Passer à "Tahoma" résolu mon problème.


0 commentaires