Có rất nhiều lịch sử đằng sau câu hỏi đó, tôi sẽ nói về nó trong một thời gian đầu tiên. Ứng dụng chế độ Console chỉ có thể hoạt động với mã hóa văn bản 8 bit. Điều này quay trở lại một quyết định thiết kế được thực hiện 42 năm trước bởi Ken Thompson và cộng sự khi họ thiết kế Unix. Một tính năng cốt lõi của Unix là thiết bị đầu cuối I/O được thực hiện thông qua các đường ống và bạn có thể nối các đường ống lại với nhau để cung cấp đầu ra của một chương trình cho đầu vào của một chương trình khác. Tính năng này cũng được triển khai trong Windows và được hỗ trợ bởi .NET cũng như các thuộc tính ProcessStartInfo.RedirectStandardXxxx.
Tính năng tuyệt vời nhưng điều đó đã trở thành vấn đề khi hệ điều hành bắt đầu áp dụng Unicode. Windows NT là phiên bản đầu tiên hoàn toàn có mã Unicode. Các ký tự Unicode phải luôn được mã hóa, một sự lựa chọn chung sau đó là UCS, sau đó được biến thành utf-16. Bây giờ có một vấn đề với chuyển hướng I/O, một chương trình phát ra ký tự mã hóa 16 bit sẽ không hoạt động tốt khi nó được chuyển hướng đến một chương trình vẫn sử dụng các ký tự mã hóa 8 bit.
Tín dụng Ken Thompson cũng như tìm giải pháp cho vấn đề này, ông đã phát minh ra mã hóa utf-8.
Điều đó cũng hoạt động trong Windows. Dễ dàng để làm trong một ứng dụng chế độ giao diện điều khiển, bạn phải làm lại gán thuộc tính Console.OutputEncoding:
using System;
using System.Text;
class Program {
static void Main(string[] args) {
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Ĥėļŀō ŵŏŗłđ");
Console.ReadLine();
}
}
Bạn sẽ tại tuy nhiên gặp phải một vấn đề khác, phông chữ được lựa chọn cho các cửa sổ giao diện điều khiển có khả năng là không thể hiển thị văn bản. Nhấn Alt + Space để gọi trình đơn hệ thống, Thuộc tính, tab Phông chữ. Bạn sẽ cần phải chọn một phông chữ không raster. Chọn rất mỏng, trên Vista và bạn có thể chọn Consolas. Chạy lại chương trình của bạn và các ký tự có dấu trọng âm sẽ hiển thị chính xác. Rất tiếc, việc buộc phông chữ bảng điều khiển theo lập trình là một vấn đề, bạn cần phải ghi lại bước cấu hình này. Ngoài ra, một phông chữ như Consolas không có tập hợp đầy đủ các ký tự Unicode có thể có. Bạn có thể thấy các hình chữ nhật xuất hiện cho các điểm mã Unicode mà nó không có glyph. Tất cả một lời nhắc nhở không rõ ràng rằng việc tạo ra một chương trình GUI thực sự là cược tốt nhất của bạn.
Nguồn
2012-10-06 14:39:07
Bạn có thể cần thay đổi mã hoặc bảng chữ cái của bảng điều khiển; xem http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using – nneonneo
Điều này không giống như giới hạn của C# /. NET, nhưng đúng hơn là: giới hạn của bảng điều khiển . Ví dụ, giao diện điều khiển của tôi nằm trong ["ibm850"] (http://en.wikipedia.org/wiki/Code_page_850), một trang mã 8 bit - không có khả năng viết unicode đầy đủ trên "ibm850". –
Chỉ có ba phông chữ có sẵn trên bàn điều khiển của tôi ... Lucida, Consolas, Raster ... là do giới hạn này? –