J'ai un morceau de code qui convertit la chaîne en flux de mémoire: Cependant, je suis un peu confus si c'est correct. Fondamentalement, je suis toujours confondu sur le codage .NET. P> Bottom Line: Est-ce que j'utilise un objet de codage correct ( Je sais que, en interne .NET stocke la chaîne en tant que Merci, Pawel P> Editer 1: Expliquons exactement comment je reçois
5 Réponses :
Si les données sont enregistrées dans UTF-8, vous devez l'ouvrir avec UTF-8. P>
Fondamentalement, je n'ouvre pas les données. S'il vous plaît vérifier mon édition en question.
Utilisez simplement le même codage pour lire comme vous l'aviez l'habitude d'écrire. Si c'était UTF8 -> Utilisez UTF8. Si vous écrivez chinois, Somony doit être capable de lire le chinois pour vous comprendre ... p>
pour la barre d'ordre d'octets UTF-8 (BOM) doit être ajouté au début du fichier. Voir le fichier est UTF-8, puis utilisez le convertisseur UTF-8. P>
J'ai ajouté des informations à poser des informations. Veuillez vérifier si votre réponse est toujours pertinente.
Assumer Votre code encodera la chaîne code> ApplicationForm CODE> dans un Cela peut être correct ou non en fonction de ce que vous voulez faire avec cela. P>
.NET Strings est toujours Si vous utilisez un codage simple comme Pour la photo complète sur Unicode Go ICI . P>
EDIT 1:
En empêchant d'autres informations sur le composant GenerateApplicationForm B>, enconding EDIT 2:
Définitivement ApplicationForm CODE> est une chaîne que vous avez lisée à partir de certains
fichier texte UTF8 code>. Ce sera
utf16 code> /
unicode code>, quel que soit l'encodage du fichier source. La conversion s'est produite lorsque vous avez chargé le fichier dans la chaîne. P>
MemoryStream code> de
utf8 code> octets. p>
utf16 code> ou
Unicode code>. Lorsque
Strings code> sont convertis en fichiers, flux ou
octet [] code>, ils peuvent être codés de différentes manières. 1 octet ne suffit pas à stocker tous les caractères différents utilisés dans toutes les langues, de sorte que des chaînes plus compliquées doivent être codées afin que d'un caractère puisse être représenté par plus d'un octet, parfois ou toujours en fonction du codage utilisé. P>
ASCII code> un caractère comprendra toujours un octet, mais les données seront limitées au jeu de caractères
ASCII code>. La conversion à 'ASCII' de tout codage UTF pourrait perdre des données si des caractères multi-octets sont utilisés. P>
utf8 code> est susceptible d'être le bon choix. Si cela ne fonctionne pas, essayez
ascii code> ou
utf16 code>. Le meilleur de tous, consultez le code source du composant ou le fournisseur de composants. P>
utf8 code> alors, vous étiez parti tout le long. P>
J'ai ajouté quelques détails à la question. Peut-être que cela aidera la question que je traite. Merci
Quels types d'encodage le support de composant GenerateApplicationForm est-il dans le flux passé? C'est le creux de la question.
Utf-8. GenerateApplicationform En fait est utilisé dans une sorte de médiateur. Ce médiateur: a) reçoit une chaîne (de la composante x - qui est en fait de la générationApplicationForm - qui génère des formulaires de demande) b) change la chaîne dans le flux c) passe le flux du composant Y. Composant Y. Composant Y s'attend à un flux d'encodage UTF-8.
Ok, je pense que je commence à l'obtenir. Cette conclusion décisive est la suivante: coding.utf8.getBytes (ApplicationForm)) La ligne fait de la conversion sur la mouche de la représentation de chaîne UTF-16 dans .NET dans UTF-8?
Cela ne fait pas une comparaison à la volée - voir ma réponse. Il s'agit d'une représentation textuelle d'une valeur binaire et de la remettre en binaire. Cela n'a rien à voir avec comment .NET traite des chaînes interne.
@dagonfly, je suis d'accord avec Windart. Peu importe ce qui est à l'intérieur de String code> (il se trouve juste utf16.) Ce qui compte, c'est lorsque vous tournez la chaîne code> de la chaîne code> dans les octets, ce que les octets seront faits pour représenter le texte, c'est-à-dire quel encodage sera utilisé.
Le codage de l'octet UTF8 produit une représentation de vos données à l'envers compatibles avec le jeu de caractères ASCII pour représenter vos données. Comme ASCII est un dénominateur commun le plus bas pour le transfert de données, vous pouvez plutôt vous garantir que cette représentation fonctionnera dans la grande majorité des systèmes. P>
Bien que vous puissiez le changer, vous supposez que tout système qu'elle va aussi comprendre que vous l'avez changé et appuierez votre nouvelle représentation. C'est une hypothèse assez difficile à vérifier. Les codages à la fois finissent beaucoup de match. p>
Si, comme vous le dites, vous ne pouvez pas modifier le système qui génère votre chaîne, puis oui, vous le faites bien. Cela fonctionne alors pourquoi voudriez-vous croire que vous devez apporter des modifications? Les internes de la façon dont .NET représente une chaîne ne vient pas en jeu ici, vous n'obtenez pas une chaîne .NET, vous obtenez une représentation codée UTF-8 d'une valeur, vous devez donc utiliser UTF8 pour le décoder à la valeur d'origine. . P>
Si cela fonctionne, ne le touchez pas.
Mais cela dépend des données que vous travaillez.
Qu'est-ce qui tente d'atteindre? Comment l'application est-elle peuplée? C'est une chaîne ... c'est dans UTF-16 en mémoire, événement s'il a été chargé à partir d'un fichier UTF-8
Quels types d'encodage le support de composant GenerateApplicationForm est-il dans le flux passé? C'est le creux de la question.
Utf-8. GenerateApplicationform En fait est utilisé dans une sorte de médiateur. Ce médiateur: a) reçoit une chaîne (de la composante x - qui est en fait de la générationApplicationForm - qui génère des formulaires de demande) b) change la chaîne dans le flux c) passe le flux du composant Y. Composant Y. Composant Y s'attend à un flux d'encodage UTF-8.