2010-10-29 40 views
6

tôi phải đọc một số tập tin văn bản với nội dung sau:Chuyển đổi một unicode Chuỗi trốn sang ký tự của nó trong ruby ​​1,8

\ u201CThe Pedlar Lady của cảm tràn trề chéo \ u201d

Trong ruby ​​1,9 thiết bị đầu cuối, khi tôi tạo ra một chuỗi với nội dung này:

ruby-1.9.1-p378 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "✔ ✔ my great string ✔ ✔" 

Trong ruby ​​1.8, tôi không nhận được mã unicode chuyển đổi sang nhân vật của mình:

ree-1.8.7-2010.01 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "u2714 u2714 my great string u2714 u2714" 

Có cách nào dễ dàng để trả về các chuỗi ký tự đúng trong Ruby 1.8 không?

Trả lời

5

Phương pháp đơn giản nhất có thể sử dụng một phân tích cú pháp JSON, như JSON xảy ra để sử dụng định dạng này rất:

irb(main):014:0> JSON '["\u2714 \u2714 my great string \u2714 \u2714"]' 
=> ["\342\234\224 \342\234\224 my great string \342\234\224 \342\234\224"] 
6

Đối với bất kỳ ai khác tình cờ về câu hỏi này (như tôi) đang tìm kiếm một câu trả lời, tương đương cách thực hiện điều này trong Ruby 1.8 sẽ là:

["2714".to_i(16)].pack("U*") 
1

Điều này được xây dựng dựa trên câu trả lời của @ Dave. Tôi đang sử dụng phần sau để thay thế tất cả các chuỗi thoát Unicode trong một chuỗi nhất định có ký tự tương ứng:

string_value.gsub(/\\u([0-9a-fA-F]{4})/) {|m| [$1.hex].pack("U")} 

Đó là biểu thức chính quy tìm kiếm "\ u" theo sau là 4 ký hiệu thập lục phân. Sau đó nó ném đi "\ u", chuyển đổi 4 ký hiệu hex thành số nguyên và sử dụng gói để lấy ký tự Unicode. Nó thay thế mỗi chuỗi thoát bằng ký tự tương ứng và trả về chuỗi kết quả.

Điều này sẽ gây rắc rối cho bạn nếu chuỗi của bạn bị thoát xa hơn (ví dụ: bằng cách "\" được thoát là "\\"). Nhưng trong trường hợp vani thì nó sẽ hoạt động tốt.

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