2008-10-27 36 views
7

Cách đơn giản nhất để chuyển đổi một codepoint Unicode thành một chuỗi byte UTF-8 trong C là gì? Cách duy nhất để ghi nhớ là sử dụng iconv để ánh xạ từ mã UTF-32LE sang UTF-8, nhưng điều đó có vẻ như quá mức cần thiết.Cách đơn giản nhất để chuyển đổi mã unicode thành UTF-8

+0

Tôi đã kết thúc bằng biểu tượng. Nó có vẻ như quá mức cần thiết, nhưng nó cũng có vẻ như là giải pháp thực sự duy nhất mà không giới thiệu các phụ thuộc bên ngoài. –

+0

Vì vậy, tại sao không chấp nhận câu trả lời của @ JesperE và upvote nó. – tvanfosson

+5

Tôi nghĩ rằng "không còn có liên quan" được sử dụng khi một lỗi trong một sản phẩm được cố định, hoặc công cụ tốt hơn được giới thiệu, không phải khi người hỏi không còn quan tâm đến câu trả lời ... –

Trả lời

7

Chuyển đổi Unicode không phải là một nhiệm vụ đơn giản. Sử dụng iconv dường như không quá mức nào đối với tôi. Có lẽ có một phiên bản thư viện iconv mà bạn có thể sử dụng để tránh thực hiện cuộc gọi system(), nếu đó là những gì bạn muốn tránh.

+0

Tôi đã lên kế hoạch sử dụng thư viện. –

+1

Đối với hướng này, đó là một nhiệm vụ cực kỳ đơn giản. Không cần thư viện. Ngoài ra, 'iconv' đề cập đến cả giao diện C và chương trình tiện ích trong POSIX. Tôi nghi ngờ OP đã nói về giao diện C, mà sẽ là một lựa chọn rất tốt cho việc này, nhưng viết nó cho mình cũng không phải là khó khăn. Đó là một hướng khác (UTF-8 đến điểm mã) dễ gây rối. –

3

UTF8 hoạt động bằng cách mã hóa độ dài của điểm mã hóa được mã hóa thành các bit cao nhất của byte được mã hóa. xem http://en.wikipedia.org/wiki/UTF-8#Description

Tôi tìm thấy chức năng nhỏ này trong C tại đây http://www.deanlee.cn/programming/convert-unicode-to-utf8/, chưa thử nghiệm.

+0

Lưu ý rằng mã này chỉ xử lý các điểm mã dưới 0x10000 (vì wchar_t trên Windows thực sự là UTF-16). –

+1

Liên kết đến mã theo cách quay lại máy: http://web.archive.org/web/20100305210636/http://www.deanlee.cn/programming/convert-unicode-to-utf8/ – Eloff

5

Tôi có thể đề xuất ICU không? Đó là một cách "chuẩn công nghiệp" hợp lý để xử lý các vấn đề i18n.

Tôi chưa sử dụng phiên bản C, nhưng tôi nghi ngờ ucnv_fromUnicode có thể là chức năng bạn đang theo dõi.

+0

Tôi sẽ không tham gia giới thiệu các phụ thuộc vào một tập hợp các thư viện không do hệ thống cung cấp chỉ dành cho tác vụ này. Nhờ đề nghị mặc dù. –

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