Làm thế nào để viết các ký tự Unicode vào bàn điều khiển?


150

Tôi đã tự hỏi nếu có thể, trong một ứng dụng giao diện điều khiển, để viết các ký tự như sử dụng .NET. Khi tôi cố gắng viết ký tự này, bàn điều khiển xuất ra một dấu hỏi.

Câu trả lời:


201

Có khả năng mã hóa đầu ra của bạn được đặt thành ASCII. Hãy thử sử dụng điều này trước khi gửi đầu ra:

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

( Liên kết MSDN đến tài liệu hỗ trợ.)

Và đây là một ứng dụng thử nghiệm bàn điều khiển nhỏ mà bạn có thể thấy tiện dụng:

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

Cũng có thể lựa chọn phông chữ Console của bạn không hỗ trợ ký tự cụ thể đó. Nhấp vào Menu thanh công cụ Windows (biểu tượng như C :.) Và chọn Thuộc tính -> Phông chữ. Hãy thử một số phông chữ khác để xem chúng có hiển thị đúng ký tự của bạn không:

hình ảnh của chỉnh sửa phông chữ giao diện điều khiển


3
Console.OutputEncodingkhông thể được đặt thành Encoding.Unicode(UTF-16). Encoding.UTF8tuy nhiên, có thể
Saeb Amini

3
Trong .NET 4.5 và sau đó UTF-16 cũng được hỗ trợ
Sami Kuhmonen

4
hm, điều này không làm việc cho tôi Tôi đang cố gắng in ra tiếng Hin-ddi hoặc tiếng Hàn và không gặp may
Quincy

1
Bạn có thể cần khởi động lại ứng dụng để thấy hiệu quả sau khi chuyển đổi giữa các phông chữ.
Mike Keskinov 17/2/2015

2
@Cel: Tôi đã thấy rằng NSimSun hoạt động cho tiếng Trung và tiếng Nhật (cũng như tiếng Anh).
kjhughes

11

Tôi tìm thấy một số giải pháp tao nhã trên MSDN

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

Chương trình đơn giản này viết ngay trên màn hình.

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}

2
Điều đó thực sự gọn gàng! Tuy nhiên tôi nghĩ rằng câu trả lời được chấp nhận vẫn được áp dụng - nếu phông chữ mà bảng điều khiển đang sử dụng không hỗ trợ các ký tự unicode, tôi tin rằng ví dụ này sẽ không hoạt động. Tuy nhiên, tôi không thể kiểm tra xem vì hiện tại tôi không có quyền truy cập vào máy tính Windows.
Sam

Vâng, tôi tin Sam là chính xác. Ví dụ, tôi bị kẹt trong thực tế là các phông chữ nhắc lệnh không hỗ trợ bộ ký tự của tôi.
Veverke


8

ngoài ra Console.OutputEncoding = System.Text.Encoding.UTF8;

đối với một số ký tự, bạn cần cài đặt thêm phông chữ (ví dụ: tiếng Trung Quốc).

Trong Windows 10, trước tiên, hãy đi tới cài đặt khu vực & ngôn ngữ và cài đặt hỗ trợ cho ngôn ngữ được yêu cầu: nhập mô tả hình ảnh ở đây

Sau đó, bạn có thể truy cập Command Prompt Proporties (hoặc Mặc định nếu bạn muốn) và chọn một số phông chữ hỗ trợ ngôn ngữ của bạn (như KaiTi trong trường hợp tiếng Trung): nhập mô tả hình ảnh ở đây

Bây giờ bạn đã sẵn sàng để đi: nhập mô tả hình ảnh ở đây


cảm ơn rất nhiều. Thay đổi Phông chữ điều khiển là cách khắc phục cho tôi :) (Ngoài ra, hãy đặt giao diện điều khiển ra để sử dụng UTF-8)
Franva

0

Điều này làm việc cho tôi:

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

Để hiển thị một số ký hiệu, bắt buộc phải đặt phông chữ của Dấu nhắc lệnh thành Bảng điều khiển Lucida:

  1. Mở lệnh nhắc nhở;

  2. Nhấp chuột phải vào thanh trên cùng của Dấu nhắc Lệnh;

  3. Nhấp vào Thuộc tính;

  4. Nếu phông chữ được đặt thành Phông chữ Raster, hãy đổi nó thành Bảng điều khiển Lucida.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.