2011-01-06 45 views
7

Tôi tìm thấy số này question cho phép tôi kiểm tra xem chuỗi có chứa ký tự tiếng Trung hay không. Tôi không chắc chắn nếu các dãy unicode là chính xác nhưng họ dường như trở về sai cho Nhật Bản và Hàn Quốc và đúng cho Trung Quốc.Phát hiện nếu ký tự được đơn giản hóa hoặc ký tự Trung Quốc truyền thống

Những gì nó không làm là cho biết nhân vật đó là tiếng Trung Quốc truyền thống hay đơn giản. Làm thế nào bạn sẽ đi về việc tìm kiếm này ra?


cập nhật

Q: Làm thế nào tôi có thể nhận ra từ giá trị 32 bit của một ký tự Unicode nếu điều này là một nhân vật Trung Quốc, Hàn Quốc hay Nhật Bản?

http://unicode.org/faq/han_cjk.html

Lập luận của họ rằng các nhân vật bất kể hình dạng của chúng có cùng ý nghĩa và do đó cần được đại diện bởi các mã tương tự. Vâng, nó không vô nghĩa đối với tôi bởi vì tôi đang phân tích các nhân vật riêng lẻ không hoạt động với giải pháp của họ:

Một giải pháp tốt hơn là xem xét toàn bộ văn bản: nếu có số lượng hợp lý, đó là có lẽ là người Nhật, và nếu có một số lượng công bằng của hangul, nó có thể là tiếng Hàn.

+1

trang mã giúp phân biệt? Có vẻ như tiếng Trung giản thể là CP 936 và Truyền thống là CP 950, ít nhất là trong thế giới Microsoft. Có lẽ bắt đầu tại http://www.i18nguy.com/unicode/codepages.html cho các mã MS và IBM. – rajah9

+4

Tôi đã tìm kiếm nhanh trên google và tìm thấy http://unicode.org/faq/han_cjk.html Tôi đã tìm thấy một số câu hỏi thú vị và họ cũng thảo luận về các nhân vật truyền thống trong đó. Hy vọng nó giúp! – Shaded

+2

Câu hỏi thường gặp được liên kết của Shaded dường như trả lời chính xác câu hỏi của bạn. Như ví dụ trong ghi chú liên kết, bạn sẽ xác định xem "trò chuyện" có phải là tiếng Anh hoặc tiếng Pháp không? Nếu bạn không nghĩ rằng câu trả lời của bạn là ở đó, bạn có thể muốn mở rộng câu hỏi của bạn một chút. – Thanatos

Trả lời

3

Như tôi nghĩ bạn đã khám phá, bạn không thể. Đơn giản và truyền thống chỉ là hai kiểu viết các ký tự giống nhau - nó giống như sự khác biệt giữa kịch bản La Mã và Gothic cho các ngôn ngữ châu Âu.

+0

Vâng, tôi đoán vậy. Chức năng trên điều loại hình thức. Đó là một bắt 22. Bạn đã phải biết nếu nhân vật là S/T để kiểm tra giá trị của nó. Vì vậy, tôi chỉ sẽ xây dựng từ điển đầu tiên và sau đó kiểm tra bởi những người :) – s84

+0

BTW - có thực sự là một cách để kiểm tra thông qua các byte, nhưng các trang unicode cho biết nó là không thực tế vì có một tấn trường hợp ngoại lệ. Đi con số! :) – s84

0

Có thể cho một số ký tự. Bộ ký tự truyền thống và đơn giản trùng lặp, do đó, bạn có ba bộ ký tự cơ bản:

  1. Ký tự chỉ truyền thống;
  2. Ký tự được đơn giản hóa;
  3. Các ký tự không được chạm vào và có sẵn ở cả hai.

Lấy ký tự 面 ví dụ. Nó thuộc về cả hai # 2 và # 3 ... Là một ký tự đơn giản, nó là viết tắt của , mặt và mì. Trong khi đó 麵 chỉ là một nhân vật truyền thống. Vì vậy, trong cơ sở dữ liệu Unihan, 麵 có một số kSimplifiedVariant, trỏ đến . Vì vậy, bạn có thể khấu trừ rằng nó là một nhân vật truyền thống mà thôi.

Nhưng cũng có một số kTraditionalVariant, trỏ đến . Nhưng đây là nơi hệ thống bị ngắt: nếu bạn sử dụng dữ liệu này để khấu trừ rằng 面 là ký tự đơn giản, bạn sẽ sai ...

Mặt khác, kTraditionalVariant, trỏ đến và hai loại này là cặp "Đơn giản"/Truyền thống "thực".Nhưng không có gì trong cơ sở dữ liệu Unihan phân biệt các trường hợp như 韓 韩 từ các trường hợp như 麵面.

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