2010-02-06 14 views
7

C# Konsolu'na bir UTF-8 dizesi (Vietnamca) yazmayı deniyorum, ancak başarı yok. Ben String char[]byte[] ve ardından string dönüştürmek Encoding sınıfını kullanmaya çalıştı Windows 7.NET Console Uygulamasında (UTF-8) Vietnamca karakter

üzerine koşuyorum, ama hiçbir yardım, dize veri tabanından doğrudan girişidir. İşte

bazı örnek

Tôi on là Đức, cuộc şarkısını vui VE Tuyết Voi

O Đ veya gibi özel karakter göstermiyor ... bunun yerine gösterisi ? kadar, Encoding sınıfından çok daha kötü.

Bunu deneyen veya bu sorunu bilen var mı?


Kodum burada

static void Main(string[] args) 
{ 
    XDataContext _new = new XDataContext(); 
    Console.OutputEncoding = Encoding.GetEncoding("UTF-8"); 
    string srcString = _new.Posts.First().TITLE; 

    Console.WriteLine(srcString); 
    // Convert the UTF-16 encoded source string to UTF-8 and ASCII. 
    byte[] utf8String = Encoding.UTF8.GetBytes(srcString); 
    byte[] asciiString = Encoding.ASCII.GetBytes(srcString); 

    // Write the UTF-8 and ASCII encoded byte arrays. 
    Console.WriteLine("UTF-8 Bytes: {0}", BitConverter.ToString(utf8String)); 
    Console.WriteLine("ASCII Bytes: {0}", BitConverter.ToString(asciiString)); 


    // Convert UTF-8 and ASCII encoded bytes back to UTF-16 encoded 
    // string and write. 
    Console.WriteLine("UTF-8 Text : {0}", Encoding.UTF8.GetString(utf8String)); 
    Console.WriteLine("ASCII Text : {0}", Encoding.ASCII.GetString(asciiString)); 

    Console.WriteLine(Encoding.UTF8.GetString(utf8String)); 
    Console.WriteLine(Encoding.ASCII.GetString(asciiString)); 
} 

ve UTF-8 maç için Console.OutputEncoding ayarlamak Sen gerekecektir üstün çıktı

Nhà báo đi hội báo Xuân 
UTF-8 Bytes: 4E-68-C3-A0-20-62-C3-A1-6F-20-C4-91-69-20-68-E1-BB-99-69-20-62-C3- 
A1-6F-20-58-75-C3-A2-6E 
ASCII Bytes: 4E-68-3F-20-62-3F-6F-20-3F-69-20-68-3F-69-20-62-3F-6F-20-58-75-3F- 
6E 
UTF-8 Text : Nhà báo đi hội báo Xuân 
ASCII Text : Nh? b?o ?i h?i b?o Xu?n 
Nhà báo đi hội báo Xuân 
Nh? b?o ?i h?i b?o Xu?n 


Press any key to continue . . . 
+1

UTF-8 için bir kodlama ayarlama çalışması gerekir: 'Console.OutputEncoding = Encoding.UTF8 '. Sorunun, veritabanından metni okuduğunuz gibi olmadığından emin misiniz? Kodunuza bir kesme noktası koyarsanız, 'srcString' doğru şekilde kodlanmış mı? –

+0

evet, kesme noktası çıkışı% 100 iyidir. Windows forma geçmeyi düşünüyorum ama bu durumda bu kadar güzel özelliklere ihtiyacım yok. :(winconsole için çok kötü – DucDigital

cevap

7
class Program 
{ 
    [DllImport("kernel32.dll")] 
    static extern bool SetConsoleOutputCP(uint wCodePageID); 

    static void Main(string[] args) 
    { 
     SetConsoleOutputCP(65001); 
     Console.OutputEncoding = Encoding.UTF8; 
     Console.WriteLine("tést, тест, τεστ, ←↑→↓∏∑√∞①②③④, Bài viết chọn lọc"); 
     Console.ReadLine(); 
    } 
} 

görüntüsü (kullanımı Consolas veya tüm yukarıdaki karakter içeren bir yazı tipi):

proof

+1

Yazı tipi çok önemlidir. Kodu denedim ve ilk başta çöp kodladım, bu yüzden bir yazı tipi anahtarının fark yaratmasını beklemiyordum, ama yaptı. – Timwi

+1

Bu gerçekten çalışıyor. Teşekkürler romkyns – DucDigital

+0

'SetConsoleOutputCP' artık bunun işe yaraması için artık gerekli görünmüyor - belki de çerçeve içinde bir şeyler var. –

0

olduğunu.

Muhtemelen gibi bir şey:

Console.OutputEncoding = System.Text.Encoding.UTF8; 
+1

Örneğim ekledim. Hiç çalışmıyor, benim Console.OutputEncoding benimki biraz farklı ama aynı şekilde çalışıyor. Seninkini de denedim, hala aynı – DucDigital

0

Eğer Konsol penceresinde kullanmak yazı görüntülemek çalışıyoruz karakterleri destekliyor mu?

+1

yazı tipi, ancak dikiş ekici UTF8 gösteremiyor? Neyse ben C# ile anında bunu değiştirebilirim? – DucDigital

-2

Bu, cmd.exe konsolu ile ilgili bir sorundur. Unicode'u desteklemiyor. [C# /. NET ile ilgisi yok]

Bir dosyaya yazabilir veya yazabilirseniz, bunu bir GUI uygulamasına değiştirmeyi deneyin. çıkış

+3

-1: Konsol tamamen Unicode uyumludur –

+0

Ama sadece sınırlı font desteği var. Örnek: Tamilce çıktılamıyorum, çünkü OS'de bu dil için unicode fontlar var.Ama demek istediğim, unicode'u desteklemiyor – Fakrudeen

+0

Sadece monospaced fontları desteklediğini düşünüyorum ve muhtemelen (emin değilim!Sağdan sola doğru şekilde yapmaz, ancak Tamil karakterleri olan tek bir yazı tipini bulursanız Tamil'i yapabilmelidir. DejaVu'yu denedim ve onlara sahip görünmüyor. –

İlgili konular