Å Ä Ö'nin çalışmasını sağlamak için kodlama nedir


12

VB.net'te, kontrol paneline gitmek yerine, bir kullanıcı ile "Windows 7 hesabı" şifresini kolayca oluşturmamı sağlayacak bir uygulama yazıyorum. Karşılaştığım sorun UTF-8 kodlamasını kullanarak VB.net'te bir yarasa dosyası oluşturduğumda, olması gerektiği gibi yazmadığıdır. Bulabildiğim tüm kodlamaları denedim, ancak çalıştıramadı.

Bunu neden aldığım konusunda bir fikriniz varsa, lütfen bana bildirin. Şimdiden teşekkürler!


stackoverflow.com'da yayınlamayı deneyin ve komut dosyanızı gösterin.
Toby Allen

1
@Toby Allen Bu gerçekten bir programlama sorusu değil, metin kodlaması ile ilgili bir soru, aynı problem .bat dosyasını "normal" şekilde oluşturduğumda ortaya çıkıyor.
kagstrom2100

Yanıtlar:


12

Düzenleme: yanılmışım;)
cmd.exeUTF-8 kabul etmez ama bunu kaydetmek için emin olmak gerekir olmadanBOM dosyasının başında.

İşte ikinci bir test. chcp 65001Toplu iş dosyanızın başında kullanabilirsiniz .

görüntü tanımını buraya girin


Bir toplu iş dosyası UTF-8 türünde olamaz . ASCII olması gerekiyor. Cmd.exesadece başka bir formatı kabul etmiyor. Küçük bir test yaptım ve karakterlerini kullanabilirsin ama biraz çalışması gerekiyor.

İle bir dosya test.batoluşturun echo Å Ä Ö. Biçimle kaydedin ANSI/ASCII. A'yı açın cmd.exeve cmd.exekullanımınızdan emin olun Lucida Console(Unicode karakterleri görüntülemek için).

Dosyayı yazdığınızda, karakterleri eski DOS karakterleri olarak gösterir. Burada bir çeviri tablosu görebilirsiniz .

Bir "Windows Ansi" ye geçtiğinizde - kod sayfası (yani Batı Avrupa Latin) chcp 1252karakterleri ile doğru şekilde görüntülenir. Aynı zamanda kendi hizmetlerine aktarılırlarsa, bu işe bağlı olarak değişir.

Peki neden bunun için bir toplu iş dosyası oluşturuyorsunuz? Sadece VB.net'te kodlayamaz mısın?

cmd.exe


2 Numarayı Düzenle:

Bu set nasıl Lucida Consolein cmd.exe:

Lucida Konsolu


BOMUTF-8 dosyasının başında 3 karakterlerdir. ( \xEF\xBB\xBF).
VB.Net'te bir dosyayı yaratacak olmadan bir BOMböyle:

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

Merhaba ve cevap için teşekkür ederim. Vb.net uygulamamda şu komutları içeren bir .bat dosyası oluşturmaya çalışıyorum: net user "kullanıcı adı" net localgroup administratörer "type" / add admin admin yerine İsveççe adminstratörer kelimesini kullanmamın sebebi localgroup kazandı İngilizce çeviriyi grup olarak almayın.
kagstrom2100 14:13

Sadece bir .bat dosyasından geçerken biraz VB.net'ten bunu yapabileceğinizi düşündüm. Gibi burada . Google’da da pek çok örnek var . Yani orta adam olarak bir .bat yaratmaya gerek yok. Ve bu örneklerle Unicode adını doğrudan Windows işlevine aktarabilirsiniz. (.Bat’ı VB.net uygulamanızdan ayrı bir zamanda farklı bir zamanda çalıştırmanız gerekmiyorsa?)
Rik

Bunu VB.net'te Google'da günlerce yapmanın bir yolunu aradım, ancak yapmanın bir yolunu bulamadım. Bağladığın örneği çoktan denedim ve işe yaramadı. .Bat dosyasının Malzeme Listesini kullanmadığından nasıl emin olabilirim? Ayrıca Lucida Konsol nedir? Bulabildiğim tek bilgi bunun bir font olduğu. İkinci örnekte / resimde yaptığınız şeyi denediğimde bunu i.imgur.com/6sh20j0.jpg
kagstrom2100 14:13

Dahil etmek Lucida Consoleve dosya oluşturmamak için cevabımı ekledim BOM(En altta Düzenle # 2). Peki bu kullanıcıyı net userkomut istemi üzerinden çalışmakla yaratıyor mu? Ve VB.net aracılığıyla oluşturursanız ne işe yaramaz? Bunun için bazı örnek kodlara (veya ayrı bir soruya) ihtiyacımız var, çünkü bunun çalışması gerekiyor. (BTW resmimi bağladın, seninki değil, sanırım, yorumunda)
Rik

2
@JohnLBevan Evet, haklısın. Görünüşe göre findUTF-8 girişini pek iyi değil. Fakat kullanabilirsiniz findstr. ping 127.0.0.1 -n 2 | findstr /C:" = "
Şunun

2

Bunu benim için düzelten şey, dosyayı BOM olmadan UTF-8 olarak kaydetmek ve bu kodu kullanmaktı.

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

Daha önce kullanmadığım şey @echo off idi, böylece chcp 65001 kullanmak onu düzeltti! Thanx tüm yardım için de Rik :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.