Quel encodage pour faire fonctionner Å Ä Ö

12

J'écris une petite application dans VB.net qui me permettra de créer facilement un "compte Windows 7" d'utilisateur avec un mot de passe, au lieu de passer par le panneau de configuration. Le problème que j'ai est que lorsque je crée un fichier bat dans VB.net en utilisant l'encodage UTF-8, il n'écrit pas å ä ö comme il est supposé l'être. J'ai essayé tous les encodages que je peux trouver mais je n'arrive pas à le faire fonctionner.

Si quelqu'un a une idée de la raison pour laquelle je reçois ceci, faites-le moi savoir. Merci d'avance!

kagstrom2100
la source
essayez de publier sur stackoverflow.com et montrez votre script.
Toby Allen
1
@Toby Allen Eh bien, ce n'est pas vraiment une question de programmation mais une question sur l'encodage du texte, le même problème se produit lorsque je crée un fichier .bat de la manière "normale".
kagstrom2100

Réponses:

12

Edit: je me trompais;)
cmd.exen'accepte UTF-8 , mais vous devez être sûr de l' enregistrer sans le BOMdébut du fichier.

Voici un deuxième test. Vous pouvez utiliser chcp 65001au début de votre fichier batch.

entrez la description de l'image ici


Un fichier batch ne peut pas être de type UTF-8. Il doit être ASCII. Cmd.exen'accepte tout simplement pas un autre format. J'ai fait un petit test et vous pouvez utiliser vos personnages mais cela demande du travail.

Créez un fichier test.batavec echo Å Ä Ö. Enregistrez-le au format ANSI/ASCII. Ouvrez un cmd.exeet assurez-vous de vos cmd.exeutilisations Lucida Console(pour afficher les caractères Unicode).

Lorsque vous tapez le fichier, il affiche les caractères comme les anciens caractères DOS. Vous pouvez voir un tableau de traduction ici .

Lorsque vous passez à une page de codes "Windows Ansi" (c'est-à-dire latin d'Europe occidentale), chcp 1252les caractères s'affichent correctement. S'ils sont également transférés vers leurs utilitaires respectifs, cela dépend de cet utilitaire.

Mais pourquoi créez-vous un fichier batch pour cela? Ne pouvez-vous pas simplement le coder dans VB.net?

cmd.exe


Modifier 2 #:

Voici comment vous définissez Lucida Consoledans cmd.exe:

Console Lucida


Il BOMy a 3 caractères au début d'un fichier UTF-8. ( \xEF\xBB\xBF).
Dans VB.net vous créez un fichier sans un BOMcomme celui - ci:

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
Rik
la source
Salut et merci pour la réponse. Dans mon application vb.net, j'essaie de créer un fichier .bat avec les commandes: net user "username" net localgroup administratörer "type" / add La raison pour laquelle je dois utiliser le mot suédois adminstratörer au lieu d'administrateur est beause localgroup won 'ne prenez pas la traduction anglaise en groupe.
kagstrom2100
Je pensais simplement que parcourir un fichier .bat était un peu beaucoup quand vous pouviez le faire directement depuis VB.net. Comme ici . Beaucoup d'exemples dans Google aussi. Donc pas besoin de créer un .bat en tant qu'intermédiaire. Et avec ces exemples, vous pouvez fournir le nom Unicode directement à la fonction Windows. (À moins que vous n'ayez besoin d'exécuter le .bat à un autre moment distinct de votre application VB.net pour une raison quelconque?)
Rik
Eh bien, je cherchais un moyen de le faire dans VB.net sur Google depuis des jours, même si je n'ai trouvé aucun moyen de le faire. J'ai déjà essayé l'exemple que vous avez lié et cela ne semble pas fonctionner. Comment puis-je m'assurer que le fichier .bat n'utilise pas la nomenclature? Qu'est-ce que Lucida Console? La seule information que j'ai pu trouver à ce sujet est qu'il s'agit d'une police. Lorsque j'essaie exactement ce que vous avez fait dans le deuxième exemple / image, j'obtiens ce i.imgur.com/6sh20j0.jpg
kagstrom2100
J'ai ajouté à ma réponse d'inclure Lucida Consoleet de créer des fichiers sans BOM(Edit # 2, en bas). Mais la création de cet utilisateur via net userfonctionne-t-elle à l'invite de commande? Et qu'est-ce qui ne fonctionne pas si vous le créez via VB.net? Pour cela, nous aurions besoin d'un exemple de code (ou d'une question distincte) car cela devrait fonctionner. (BTW vous avez lié mon image, pas la vôtre, je pense, dans votre commentaire)
Rik
2
@JohnLBevan Oui, vous avez raison. Apparemment, findne gère pas trop bien l'entrée UTF-8. Mais vous pouvez utiliser findstr. Comme ça:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik
2

La chose qui a résolu cela pour moi était d'enregistrer le fichier au format UTF-8 sans nomenclature et en utilisant ce code

@echo off
chcp 65001
net user Linus /add
net localgroup Administratörer Test/add

La chose que je n'ai pas utilisée auparavant était @echo off, et c'est ce qui a été résolu grâce à chcp 65001! Merci aussi Rik pour toute l'aide :)

kagstrom2100
la source