Tên tập tin UTF 8?


15

Trong hệ điều hành unix dựa trên tên tập tin utf6 có được phép không? Nếu vậy tôi cần làm gì đặc biệt để ghi tập tin vào đĩa.

Hãy để tôi giải thích những gì tôi hy vọng sẽ làm. Tôi đang viết một ứng dụng sẽ chuyển một tập tin qua ftp đến một hệ thống từ xa nhưng tên tệp được đặt tự động thông qua một số tập hợp dữ liệu meta có khả năng có thể có trong utf8. Tôi tự hỏi nếu có điều gì đó tôi cần phải làm để ghi tệp vào đĩa trong unix / linux.

Ngoài ra, có ai biết điều gì sẽ xảy ra nếu tôi tải lên tên tệp utf 8 lên hệ thống không hỗ trợ utf8 không?

Câu trả lời:


20

Trên Unix / Linux, tên tệp là một chuỗi gồm bất kỳ byte nào ngoại trừ dấu gạch chéo hoặc NUL. Dấu gạch chéo phân tách các thành phần đường dẫn và NUL chấm dứt tên đường dẫn.

Vì vậy, bạn có thể sử dụng bất kỳ mã hóa nào bạn muốn cho tên tệp. Một số ứng dụng có thể gặp rắc rối với một số mã hóa nếu chúng không ngây thơ về các ký tự có thể có trong tên tệp - ví dụ: các tập lệnh shell được viết kém thường không xử lý tên tệp có khoảng trắng.

Các môi trường Unix / Linux hiện đại xử lý tên tệp được mã hóa UTF-8 tốt.


12

Trong nội bộ, hầu hết các hệ thống tệp lưu trữ byte: trình điều khiển hệ thống tệp không quan tâm đến ý nghĩa của byte. Trình điều khiển hệ thống tệp chung trên Linux và hầu hết các thông báo hiện đại khác cho phép mọi byte khác ngoài /và byte null xuất hiện trong tên tệp.

Có các hệ thống tệp có thể có các ràng buộc mã hóa - thường là các hệ thống tệp không phải là nguồn gốc như FAT hoặc NTFS. Một số hệ thống tệp mạng như Samba có thể dịch giữa mã hóa máy chủ và mã hóa máy khách; bạn sẽ cần đảm bảo rằng cấu hình máy chủ và máy khách được kết hợp chặt chẽ.

Thông thường, trên hầu hết các hệ thống, các byte tạo nên tên tệp được hiểu là UTF-8. Nếu bạn chạy một ứng dụng diễn giải tên tệp dưới dạng ký tự, ví dụ ứng dụng truyền tên qua FTP, bạn có thể cần định cấu hình ứng dụng này để thông báo rằng tên tệp của bạn được mã hóa theo UTF-8. Đặt môi trường LC_CTYPEthành ngôn ngữ UTF-8 giống như en_US.UTF-8mẹo cho nhiều ứng dụng dòng lệnh.

Nếu bạn lưu trữ tệp trên hệ thống không hỗ trợ UTF-8, điều đó không thành vấn đề. Các byte sẽ giữ nguyên. Bạn sẽ không thể hiển thị các ký tự tạo nên tên tệp, nhưng nếu bạn sao chép các tệp đó trở lại hệ thống hỗ trợ UTF-8, các byte tương tự sẽ vẫn hiển thị dưới dạng các ký tự UTF-8.

Nếu bạn đang viết ứng dụng của riêng mình, sử dụng UTF-8 trong nội bộ và, bất cứ khi nào có thể, để lưu trữ và truyền tải là một ý tưởng hay.

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.