Bagaimana cara menulis karakter Unicode ke konsol?

150

Saya bertanya-tanya apakah mungkin, dalam aplikasi konsol, untuk menulis karakter seperti menggunakan .NET. Ketika saya mencoba menulis karakter ini, konsol mengeluarkan tanda tanya.

Sam
sumber

Jawaban:

201

Kemungkinan encoding output Anda diatur ke ASCII. Coba gunakan ini sebelum mengirim output:

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

( Tautan MSDN ke dokumentasi pendukung.)

Dan inilah aplikasi uji konsol kecil yang mungkin berguna bagi Anda:

C #

using System;
using System.Text;

public static class ConsoleOutputTest {
    public static void Main() {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        for (var i = 0; i <= 1000; i++) {
            Console.Write(Strings.ChrW(i));
            if (i % 50 == 0) { // break every 50 chars
                Console.WriteLine();
            }
        }
        Console.ReadKey();
    }
}

VB.NET

imports Microsoft.VisualBasic
imports System

public module ConsoleOutputTest 
    Sub Main()
        Console.OutputEncoding = System.Text.Encoding.UTF8
        dim i as integer
        for i = 0 to 1000
            Console.Write(ChrW(i))
            if i mod 50 = 0 'break every 50 chars 
                Console.WriteLine()
            end if
        next
    Console.ReadKey()
    End Sub
end module

Mungkin juga font Font Konsol pilihan Anda tidak mendukung karakter tertentu. Klik pada Menu Bilah Alat Windows (ikon seperti C :.) dan pilih Properti -> Font. Coba beberapa font lain untuk melihat apakah mereka menampilkan karakter Anda dengan benar:

gambar edit font konsol

Paul Sasik
sumber
3
Console.OutputEncodingtidak dapat diatur ke Encoding.Unicode(UTF-16). Encoding.UTF8Namun, itu mungkin.
Saeb Amini
3
Dalam .NET 4.5 dan yang lebih baru juga didukung UTF-16
Sami Kuhmonen
4
hm, ini tidak berhasil untuk saya. Saya mencoba untuk mencetak hindi atau korea dan tidak berhasil
Quincy
1
Anda mungkin perlu memulai ulang aplikasi untuk melihat efek setelah beralih antar font.
Mike Keskinov
2
@Cel: Saya menemukan bahwa NSimSun bekerja untuk bahasa Cina dan Jepang (juga bahasa Inggris).
kjhughes
11

Saya menemukan beberapa solusi elegan di MSDN

System.Console.Write('\uXXXX') //XXXX is hex Unicode for character

Program sederhana ini menulis ℃ tepat di layar.

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}
Destiner
sumber
2
Itu sangat rapi! Namun saya pikir jawaban yang diterima masih berlaku - jika font yang digunakan konsol tidak mendukung karakter unicode, saya percaya contoh ini tidak akan berfungsi. Saya tidak dapat memeriksa itu, karena saya tidak memiliki akses ke komputer Windows saat ini.
Sam
Ya, saya percaya Sam benar. Saya misalnya terjebak dalam kenyataan bahwa font command prompt tidak mendukung set karakter saya.
Veverke
8

Selain Console.OutputEncoding = System.Text.Encoding.UTF8;

untuk beberapa karakter Anda perlu menginstal font tambahan (mis. Bahasa Cina).

Di Windows 10 pertama pergi ke pengaturan Wilayah & bahasa dan menginstal dukungan untuk bahasa yang diperlukan: masukkan deskripsi gambar di sini

Setelah itu Anda dapat pergi ke Command Prompt Proporties (atau Defaults jika Anda suka) dan pilih beberapa font yang mendukung bahasa Anda (seperti KaiTi dalam kasus Cina): masukkan deskripsi gambar di sini

Sekarang Anda siap untuk pergi: masukkan deskripsi gambar di sini

watbywbarif
sumber
Terima kasih banyak. Ubah Font Konsol adalah perbaikan untuk saya :) (Juga atur konsol untuk menggunakan UTF-8)
Franva
0

Ini bekerja untuk saya:

Console.OutputEncoding = System.Text.Encoding.Default;

Untuk menampilkan beberapa simbol, diperlukan untuk mengatur font Command Prompt ke Lucida Console:

  1. Prompt Perintah Terbuka;

  2. Klik kanan pada bilah atas dari Command Prompt;

  3. Klik Properti;

  4. Jika font diatur ke Raster Fonts, ubah ke Lucida Console.

თემო ნემსიწვერიძე
sumber