Nhược bằng tôi lấy chiều dài của một chuỗi có chứa một nhân vật bên ngoài bảng ASCII 7-bit, tôi nhận được kết quả khác nhau trên Windows và Linux:C Chuỗi mã hóa Windows/Linux
Windows: strlen("ö") = 1
Linux: strlen("ö") = 2
Trên một máy tính Windows chuỗi rõ ràng được mã hóa ở định dạng ascii "mở rộng" là 0xF6
, trong khi trên một máy Linux, nó được mã hóa bằng UTF-8 với 0xC3 0x96
, cung cấp độ dài 2 ký tự.
Câu hỏi:
Tại sao chuỗi C được mã hóa khác trên máy tính Windows và Linux?
Câu hỏi đặt ra đã đưa ra trong một cuộc thảo luận tôi đã có với một thành viên diễn đàn đồng trên Mã Review (see this thread).
Cả hai tệp nguồn có sử dụng cùng một cài đặt mã hóa và BOM không? – sidyll
Có vẻ như mã hóa có thể được chọn từ cài đặt cục bộ. Và có vẻ như bạn cũng có thể đặt nó? https://gcc.gnu.org/onlinedocs/cpp/Invocation.html (-fwide-exec-charset = charset) – Sush
Vì trong Windows CP-1252 là mặc định, và có một số vấn đề với UTF-8 khi Microsoft muốn giữ tương thích ngược. Xem cái này trên SU [Windows 7 UTF-8 và Unicode] (// superuser.com/q/221593) – Danh