2011-01-06 4 views
5

Tôi tìm thấy một từ điển gồm các ký tự Trung Quốc trong unicode. Tôi đang cố gắng để xây dựng một cơ sở dữ liệu của nhân vật ra khỏi từ điển này nhưng tôi không biết làm thế nào để chuyển đổi unicode để một nhân vật ..chuyển đổi unicode thành ký tự bằng ruby ​​

p "国".unpack("U*").first #this gives the unicode 22269 

Làm thế nào có thể chuyển đổi 22269 trở lại giá trị nhân vật đó sẽ là điều ngược lại của dòng trên.

+2

Phiên bản nào của Ruby bạn đang sử dụng? – Phrogz

+0

Tôi có rvm vì vậy nó không quan trọng. Bất kỳ đề xuất nào bao gồm cả 1.9.2 đều được hoan nghênh. – s84

+1

Nếu bạn đang chuyển đổi nhiều văn bản, bạn có thể muốn xem mô-đun [IConv] (http://ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.html) của Ruby, một phần của lõi thư viện. [rubydoc.info] (http://rubydoc.info/stdlib/iconv/1.9.2/frames) cũng có tài liệu. Và James Edward Gray đã làm một bài viết hay gọi là [Encoding Conversion With iconv] (http://blog.grayproductions.net/articles/encoding_conversion_with_iconv). Điều tuyệt vời về IConv là nó có thể chuyển ngữ, tức là, thay đổi thành các ký tự tìm kiếm tương tự, hoặc bỏ qua, khi không có kết quả phù hợp, do đó chuyển đổi của bạn sẽ bị suy giảm theo cách được kiểm soát. –

Trả lời

11
[22269].pack('U*') #=> "国" or "\345\233\275" 

Sửa: Làm việc trong 1.8.6+ (xác nhận trong 1.8.6, 1.8.7 và 1.9.2). Trong phiên bản 1.8.x, bạn nhận được một chuỗi ba byte biểu diễn ký tự Unicode duy nhất, nhưng sử dụng puts để làm cho ký tự Trung Quốc chính xác xuất hiện trong thiết bị đầu cuối.

+0

Điều đó hoạt động, cảm ơn! Bạn có một giải pháp cho 1.8.7? – s84

+3

@Sam Rõ ràng nó không quan trọng bạn đang sử dụng phiên bản nào. (Xem chỉnh sửa) :) – Phrogz

+0

Có vẻ như ruby ​​nhận được điều này trước khi nâng cấp unicode – s84

12

của Ruby 1.9:

p "国".codepoints.first #=> 22269 
p 22269.chr('UTF-8') #=> "国" 
+0

NoMethodError: không xác định phương thức 'codepoints' cho "国": Chuỗi – s84

+0

@Sam Bạn đã sử dụng phiên bản ruby ​​nào? – steenslag

+0

Tôi đã thử 1.8.7 và 1.9.2 – s84