web-dev-qa-db-ja.com

ÅÄÖを機能させるためのエンコーディング

VB.netで小さなアプリケーションを書いています。これを使用すると、コントロールパネルを経由する代わりに、パスワードを使用してユーザー「Windows 7アカウント」を簡単に作成できます。私が抱えている問題は、UTF-8エンコーディングを使用してVB.netでbatファイルを作成するときに、想定どおりにåäöが書き込まれないことです。私は見つけることができるすべてのエンコーディングを試しましたが、機能させることができません。

なぜ私がこれを取得しているのかについて誰かが考えを持っている場合は、私に知らせてください。よろしくお願いします!

12
kagstrom2100

編集:私は間違っていました;)
cmd.exeはUTF-8を受け入れますが、必ず保存する必要がありますなしファイルの先頭にあるBOM

これは2番目のテストです。バッチファイルの先頭にchcp 65001を使用できます。

enter image description here


バッチファイルできません UTF-8タイプである必要があります。 ASCIIである必要があります。 Cmd.exeは、別の形式を受け入れません。私は簡単なテストを行い、あなたはあなたのキャラクターを使うことができますが、それはいくつかの作業を必要とします。

test.batを使用してecho Å Ä Öでファイルを作成します。形式ANSI/ASCIIで保存します。 cmd.exeを開き、cmd.exeLucida Consoleを使用していることを確認します(Unicode文字を表示するため)。

ファイルを入力すると、古いDOS文字として文字が表示されます。あなたは翻訳チャートを見ることができます ここ

chcp 1252を使用して「Windows Ansi」- コードページ (つまり西ヨーロッパのラテン語)に切り替えると、文字が正しく表示されます。それらがそれぞれのユーティリティに転送されるかどうかは、そのユーティリティに依存します。

しかし、なぜこのためのバッチファイルを作成しているのですか? VB.netでコーディングすることはできませんか?

cmd.exe


2#を編集:

これは、Lucida Consolecmd.exeを設定する方法です。

Lucida Console


BOMは、UTF-8ファイルの先頭の3文字です。 (\xEF\xBB\xBF)。
VB.netでは、次のようにファイルを作成しますwithout a BOM

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
12
Rik

私のためにこれを修正したのは、BOMなしでファイルをUTF-8として保存し、このコードを使用することでした

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

以前に使用しなかったのは@ echo offだったので、chcp 65001を使用することで解決しました。すべての助けをありがとうRik :)

2
kagstrom2100