2010-08-26 49 views
5

Giả sử tôi có ký tự Trung Quốc ngẫu nhiên, 玩. Tôi muốn chuyển đổi nó thành Unicode, sẽ là U + 73A9. Làm thế nào tôi có thể làm điều này trong C#?Chuyển đổi ký tự tiếng Trung thành Unicode

+3

Nhân vật Trung Quốc này đến từ đâu? Nhập bằng bàn phím? Từ một tệp trên đĩa? Mã hóa hoặc mã hóa nào được sử dụng trong tệp đó? (Tiếng Trung giản thể, tiếng Trung Phồn thể, hoặc ??) Bạn cần biết mã hóa nào được sử dụng trên các byte đầu vào trước khi bạn có thể chuyển đổi nó thành một số mã hóa khác. – dthorpe

+0

Nhập bằng bàn phím, sử dụng UTF (16 tôi đoán, cần có hầu hết các ký tự), Giản thể hoặc truyền thống. – Mass

Trả lời

5

Hãy mychar như một char tham khảo nhân vật đặc biệt của bạn ...

Console.WriteLine("{0} U+{1:x4} {2}", myChar, (int)myChar, (int)myChar); 

Trên chúng ta xuất ra nhân vật chính tiếp theo là điểm mã Unicode và sau đó giá trị số nguyên.

Giảm chuỗi định dạng và các thông số đầu ra chỉ là "U + ..." mã ...

Console.WriteLine("U+{0:x4}", (int)myChar); 
+0

Cảm ơn, điều này thật tuyệt vời! Bạn có thể giải thích mã cho tôi không? Tôi hiểu bạn đang viết U +, nhưng '{0: x4}' là gì? Tôi biết một trong số họ là một số specifier, vì vậy những gì là ': x4'? – Mass

+2

'x4' xuất ra dưới dạng hex (x), 4 chữ số không được đệm ở bên trái. – Chris

+0

Cảm ơn! (15 ký tự ...) – Mass

2

Ký hiệu char ater bằng Unicode.

Nếu bạn có nó trong C# là 玩, thì nó hiện đang ở dạng UTF-16, là một trong các dạng mã hóa Unicode.

Nếu bạn đang có được nó từ một nơi nào khác mà bạn cần phải:

  1. Tìm mã hóa nó là trong
  2. Lấy byte (bọc bởi một dòng là đẹp)..
  3. Nhận ghi bộ mã hóa thích hợp.
  4. Sử dụng bộ mã hóa để lấy chuỗi (gói luồng đẹp bằng trình nhắn tin văn bản đẹp hơn).

Bước 3 Có thể đơn giản (oh, tôi chỉ sử dụng cái đó!) Hoặc cứng (darn, phải tự viết!) Hoặc ở đâu đó (hey, bất cứ ai đã viết một trong những đã ?!)

+0

Ý tôi là tôi muốn biến ký tự thành U + 73A9 – Mass

+0

char c = '\ u73a9'; –

+0

@ Greg- cảm ơn, nhưng tôi muốn nó theo cách khác. Tôi muốn một cái gì đó như 玩 -> \ u73a9 – Mass

0

Một chút ví dụ nữa, mà theo mô hình trong câu trả lời Jon Hanna của:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace UnicodeDecodeConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      char c = '\u73a9'; 
      char[] chars = {c}; 
      Encoding encoding = Encoding.BigEndianUnicode; 
      byte[] decodeds = encoding.GetBytes(chars); 
      StringBuilder stringBuilder = new StringBuilder("U+"); 
      foreach (byte decoded in decodeds) 
      { 
       stringBuilder.Append(decoded.ToString("x2")); 
      } 
      Console.WriteLine(stringBuilder); 
      Console.ReadLine(); 
     } 
    } 
} 

--jeroen

Các vấn đề liên quan