Pengkodean apa yang membuat Å Ä Ö bekerja

12

Saya sedang menulis aplikasi kecil di VB.net yang akan memungkinkan saya untuk dengan mudah membuat pengguna "akun Windows 7" dengan kata sandi, bukannya melalui panel kontrol. Masalah yang saya alami adalah bahwa ketika saya membuat file bat di VB.net menggunakan pengkodean UTF-8 itu tidak menulis å ä ö seperti yang seharusnya. Saya telah mencoba semua penyandian yang dapat saya temukan tetapi tidak dapat membuatnya berfungsi.

Jika ada yang tahu mengapa saya mendapatkan ini, beri tahu saya. Terima kasih sebelumnya!

kagstrom2100
sumber
coba posting di stackoverflow.com dan perlihatkan skrip Anda.
Toby Allen
1
@ Bob Allen Yah itu bukan pertanyaan pemrograman tapi pertanyaan tentang penyandian teks, masalah yang sama terjadi ketika saya membuat file .bat dengan cara "normal".
kagstrom2100

Jawaban:

12

Edit: aku salah;)
cmd.exetidak menerima UTF-8 tetapi Anda harus yakin untuk menyimpannya tanpa yang BOMpada awal file.

Ini tes kedua. Anda dapat menggunakan chcp 65001di awal file batch Anda.

masukkan deskripsi gambar di sini


File batch tidak bisa dari jenis UTF-8. Itu harus ASCII. Cmd.exetidak menerima format lain. Saya melakukan tes kecil dan Anda dapat menggunakan karakter Anda tetapi perlu beberapa pekerjaan.

Buat file test.batdengan echo Å Ä Ö. Simpan dengan format ANSI/ASCII. Buka a cmd.exedan pastikan cmd.exepenggunaan Anda Lucida Console(untuk menampilkan karakter Unicode).

Ketika Anda mengetik file itu akan menampilkan karakter sebagai karakter DOS lama. Anda dapat melihat grafik terjemahan di sini .

Ketika Anda beralih ke "Windows Ansi" - halaman kode (yaitu Latin Eropa Barat) dengan chcp 1252karakter ditampilkan dengan benar. Jika mereka juga ditransfer ke utilitas masing-masing tergantung pada utilitas itu.

Tapi mengapa Anda membuat file batch untuk ini? Tidak bisakah Anda hanya kode di VB.net?

cmd.exe


Edit 2 #:

Ini adalah bagaimana Anda mengatur Lucida Consoledi cmd.exe:

Konsol Lucida


Ada BOM3 karakter di awal file UTF-8. ( \xEF\xBB\xBF).
Dalam VB.net Anda akan menciptakan sebuah file tanpa sebuah BOMseperti ini:

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
Rik
sumber
Hai dan thanx untuk jawabannya. Dalam aplikasi vb.net saya, saya mencoba membuat file .bat dengan perintah: net user "username" net localgroup administratörer "type" / add dapat mengambil terjemahan bahasa Inggris sebagai grup.
kagstrom2100
Hanya berpikir melalui file .bat agak banyak ketika Anda bisa melakukan ini langsung dari VB.net. Seperti di sini . Banyak contoh di Google juga. Jadi tidak perlu membuat .bat sebagai perantara. Dan dengan contoh-contoh itu Anda bisa memberi makan nama Unicode langsung ke fungsi Windows. (Kecuali jika Anda perlu menjalankan .bat pada waktu yang berbeda terpisah dari aplikasi VB.net Anda karena suatu alasan?)
Rik
Yah saya telah mencari cara untuk melakukan ini di VB.net di Google selama berhari-hari, meskipun saya belum menemukan cara untuk melakukannya. Saya sudah mencoba contoh yang Anda tautkan dan sepertinya tidak berhasil. Bagaimana cara memastikan bahwa file .bat tidak menggunakan BOM? Juga apa itu Konsol Lucida? Satu-satunya info yang saya dapat temukan tentang itu adalah font. Ketika saya mencoba hal yang persis Anda lakukan pada contoh / gambar kedua, saya mendapatkan ini i.imgur.com/6sh20j0.jpg
kagstrom2100
Saya menambahkan jawaban saya untuk disertakan Lucida Consoledan pembuatan file tanpa BOM(Edit # 2, di bagian bawah). Tetapi apakah membuat pengguna ini melalui net userkerja pada command-prompt? Dan apa yang tidak berfungsi jika Anda membuatnya melalui VB.net? Untuk ini kita perlu beberapa contoh-kode (atau pertanyaan terpisah) karena ini akan berfungsi. (BTW Anda menautkan gambar saya, bukan milik Anda, saya kira, dalam komentar Anda)
Rik
2
@ JohnLBevan Ya, Anda benar. Tampaknya findtidak menangani input UTF-8 tidak terlalu baik. Tapi Anda bisa menggunakannya findstr. Seperti ini:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik
2

Hal yang memperbaikinya bagi saya adalah menyimpan file sebagai UTF-8 tanpa BOM dan menggunakan kode ini

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

Hal yang saya tidak gunakan sebelumnya adalah @echo off sehingga dan menggunakan chcp 65001 adalah apa yang memperbaikinya! Terima kasih terlalu Rik untuk semua bantuan :)

kagstrom2100
sumber