จะเขียนอักขระ Unicode ไปยังคอนโซลได้อย่างไร


150

ฉันสงสัยว่ามันเป็นไปได้ในแอปพลิเคชั่นคอนโซลเพื่อเขียนตัวอักษรเช่นการใช้. NET เมื่อฉันพยายามเขียนตัวละครนี้คอนโซลจะแสดงเครื่องหมายคำถาม

คำตอบ:


201

เป็นไปได้ว่าการเข้ารหัสผลลัพธ์ของคุณถูกตั้งค่าเป็น ASCII ลองใช้สิ่งนี้ก่อนที่จะส่งออก:

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

( ลิงก์ MSDN ไปยังเอกสารประกอบที่สนับสนุน)

และนี่คือแอปทดสอบคอนโซลขนาดเล็กที่คุณอาจพบว่ามีประโยชน์:

ค#

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

อาจเป็นไปได้ว่าตัวเลือกคอนโซลแบบอักษรที่คุณเลือกไม่รองรับอักขระนั้น คลิกที่เมนูแถบเครื่องมือ Windows (ไอคอนเช่น C :. ) และเลือก Properties -> Font ลองแบบอักษรอื่น ๆ เพื่อดูว่าพวกเขาแสดงตัวของคุณอย่างถูกต้อง:

รูปภาพของฟอนต์คอนโซลแก้ไข


3
Console.OutputEncodingไม่สามารถตั้งค่าเป็นEncoding.Unicode(UTF-16) Encoding.UTF8อย่างไรก็ตามเป็นไปได้
Saeb Amini

3
ใน. NET 4.5 และใหม่กว่ารองรับ UTF-16 ด้วย
Sami Kuhmonen

4
หืมมันใช้ไม่ได้สำหรับฉัน ฉันพยายามพิมพ์ภาษาฮินดีหรือภาษาเกาหลีและไม่มีโชค
Quincy

1
คุณอาจต้องรีสตาร์ทแอปเพื่อดูผลกระทบหลังจากสลับไปมาระหว่างแบบอักษร
Mike Keskinov

2
@Cel: ฉันพบว่า NSimSun ใช้ได้กับภาษาจีนและญี่ปุ่น (เช่นเดียวกับภาษาอังกฤษ)
kjhughes

11

ฉันพบโซลูชันที่สง่างามบน MSDN

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

โปรแกรมที่เรียบง่ายนี้เขียนได้ทันทีบนหน้าจอ

using System;

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

2
นั่นมันเรียบร้อยจริงๆ! อย่างไรก็ตามฉันคิดว่าคำตอบที่ยอมรับยังคงใช้อยู่ - ถ้าแบบอักษรที่ใช้คอนโซลไม่รองรับอักขระ Unicode ฉันเชื่อว่าตัวอย่างนี้จะไม่ทำงาน ฉันไม่สามารถตรวจสอบสิ่งนั้นได้เนื่องจากฉันไม่สามารถเข้าถึงคอมพิวเตอร์ Windows ได้ในขณะนี้
Sam

ใช่ฉันเชื่อว่าแซมถูกต้อง ตัวอย่างเช่นฉันติดอยู่ในความจริงที่ว่าแบบอักษรพรอมต์คำสั่งไม่สนับสนุนชุดตัวละครของฉัน
Veverke

9

คุณสมบัติ Console.OutputEncoding

http://msdn.microsoft.com/library/system.console.outputencoding(v=vs.110).aspx

โปรดทราบว่าการแสดงอักขระ Unicode ในคอนโซลสำเร็จต้องใช้สิ่งต่อไปนี้:

  • คอนโซลต้องใช้แบบอักษร TrueType เช่น Lucida Console หรือ Consolas เพื่อแสดงอักขระ

8

นอกเหนือจาก Console.OutputEncoding = System.Text.Encoding.UTF8;

สำหรับตัวละครบางตัวคุณต้องติดตั้งแบบอักษรเพิ่มเติม (เช่นภาษาจีน)

ในWindows 10อันดับแรกไปที่การตั้งค่าภูมิภาค & ภาษาและติดตั้งการสนับสนุนสำหรับภาษาที่ต้องการ: ป้อนคำอธิบายรูปภาพที่นี่

หลังจากนั้นคุณสามารถไปที่Command Prompt Proporties (หรือค่าเริ่มต้นหากคุณต้องการ)และเลือกแบบอักษรที่รองรับภาษาของคุณ (เช่นKaiTiในภาษาจีน): ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณกำลังจะไป: ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณมาก. เปลี่ยนแบบอักษรของคอนโซลเป็นการแก้ไขสำหรับฉัน :) (รวมทั้งตั้งค่าคอนโซลเอาไว้ให้ใช้ UTF-8)
Franva

0

สิ่งนี้ใช้ได้กับฉัน:

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

ในการแสดงสัญลักษณ์บางอย่างจำเป็นต้องตั้งแบบอักษรของ Command Prompt เป็น Lucida Console:

  1. เปิดพรอมต์คำสั่ง;

  2. คลิกขวาที่แถบด้านบนของพรอมต์คำสั่ง;

  3. คลิกคุณสมบัติ

  4. หากแบบอักษรถูกตั้งค่าเป็น Raster Fonts ให้เปลี่ยนเป็น Lucida Console

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.