Làm thế nào để đối phó với các ký tự unicode với màn hình LCD ký tự?


8

Tôi muốn mua một màn hình LCD fom Arduino để hiển thị một số kết quả từ một cuộc gọi web http; API Web trả về văn bản JSON được mã hóa theo UTF-8.

Tôi đã đọc rằng ICU là cách để xử lý Unicode trong các chương trình C / C ++ cho Arduino.

Câu hỏi của tôi:
Tôi có thể hiển thị các ký tự UTF-8 cho loại màn hình này không?
Có màn hình LCD ký tự (giá cả phải chăng) có thể hiển thị các ký tự UTF-8 không?


3
Chúng ta đang nói về một màn hình đồ họa hoặc hiển thị ký tự được phân đoạn? Trên màn hình được phân đoạn, rõ ràng bạn không thể hiển thị bất kỳ thứ gì không phù hợp với mẫu phân khúc. Đối với việc sử dụng "phương tây" không phải là ascii, có lẽ bạn có thể quay lại ký tự cơ sở (không có dấu, v.v.). Đối với các kịch bản khác, bạn rất có thể không gặp may mắn.
drxzcl

Câu trả lời:


6

Tôi không quen thuộc lắm với Arduino, nhưng hãy nhìn nó từ góc độ LCD.

Ngày nay, tất cả các màn hình LCD nhân vật phổ biến đều sử dụng bộ điều khiển HD44780 (đó là những gì LiquidCstall thư viện hỗ trợ). Bộ điều khiển này không hỗ trợ trực tiếp UTF-8, mỗi ký tự được biểu thị bằng một byte đơn.

Do đó, bạn cần chuyển đổi các ký tự UTF-8 thành 8 bit theo cách thủ công. Bộ điều khiển có bộ tạo ký tự tích hợp với 208 5x8 và 32 ký tự 5x10, cộng với tối đa 8 ký tự do người dùng xác định (xem createChar ). Bạn cần ánh xạ mọi ký tự đầu vào thành một trong các ký tự được xác định trước / tùy chỉnh - rõ ràng bạn chỉ có thể hiển thị một tập hợp con các ký tự UTF8, bạn cần quyết định những ký tự nào bạn muốn / có thể hiển thị.

Bản thân việc chuyển đổi phải khá đơn giản - bạn chỉ cần lặp qua chuỗi UTF8, ánh xạ mọi ký tự thành một byte đơn. Nhiều khả năng bạn sẽ muốn sử dụng bảng tra cứu để đơn giản hóa. Hãy cho tôi biết nếu điều này cần giải thích thêm.


cảm ơn bạn; Bạn có nghĩ loại màn hình đồ họa Tft này có thể cung cấp hỗ trợ unicode tốt hơn không?
systempuntoout

1
Đây là một màn hình đồ họa, theo như tôi có thể thấy, vì vậy nó có thể hiển thị khá nhiều thứ bạn muốn. Thư viện được cung cấp cũng cung cấp các chức năng để vẽ văn bản, nhưng một lần nữa, nó chỉ hỗ trợ các ký tự 8 bit. Vì vậy, với màn hình này, bạn cần phải thực hiện cùng một loại chuyển đổi như được mô tả ở trên và sử dụng thư viện như hiện tại hoặc bạn phải sửa đổi thư viện để hỗ trợ UTF8. Hãy nhớ rằng, sử dụng màn hình đồ họa sẽ làm cho mã của bạn lớn hơn - bạn cần thêm thư viện, phông chữ, v.v. Nhưng ít nhất bạn có toàn quyền kiểm soát bộ ký tự có sẵn - phông chữ là một phần của phần mềm.
Họa sĩ mã

4

Unicode rất phức tạp và lớn, nói chung, nó quá lớn đối với Arduino. Trong phiên bản hiện tại có tổng cộng hơn 100000 ký tự, bao gồm chữ hình nêm, chữ tượng hình, Klingon, và chưa kể nhiều ngàn ký tự Trung Quốc.

Vì vậy, nếu bạn thực sự muốn hiển thị một số ký tự Unicode trên Arduino:

  • Nhận một màn hình đồ họa. Cái bạn đề cập là màn hình hiển thị ký tự, nó chỉ có thể hiển thị một bộ 256 ký tự cố định.

  • Xác định một tập hợp nhỏ các ký tự bạn muốn xử lý. Có một số tập hợp con được xác định trước, ví dụ: Các tập con đa ngôn ngữ châu Âu trông rất đẹp.

  • Lấy một số phông chữ và tước chúng xuống bộ bạn cần. Lưu ý rằng ngay cả việc hiển thị có thể phức tạp hơn nhiều so với những gì bạn đã sử dụng từ ASCII, do kết hợp các ký tự, cách viết hai chiều và như vậy. Tốt nhất có lẽ là để gắn bó với các ký tự Latin mà không có bất kỳ dấu kết hợp. Cyrillic và Hy Lạp cũng sẽ ổn, cũng như bất cứ thứ gì là một chuỗi ký tự từ trái sang phải đơn giản.

  • Có lẽ bạn có thể sử dụng một số bộ nhớ ngoài để lưu trữ các phông chữ.

Sau đó, có rất nhiều chủ đề khác mà bạn có thể không cần, ví dụ như sắp xếp và tìm kiếm, hãy xem tiêu chuẩn Unicode và các phụ lục của nó (thật tuyệt!).

Quên ICU, nó cần megabyte bộ nhớ.


Tôi sẽ phải thử đặt (một tập hợp con!) Của ICU trên Arduino .. sẽ rất vui.
Steven R. Loomis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.