2012-08-31 44 views
9

GCC 4.7 trên Linux/x86_64 có mã hóa ký tự mặc định mà nó xác nhận và giải mã nội dung của chuỗi ký tự trong các tệp nguồn C không? Có thể định cấu hình này không?GCC 4.7 Mã hóa ký tự nguồn và thực thi mã hóa ký tự cho chuỗi ký tự?

Hơn nữa, khi liên kết dữ liệu chuỗi từ chuỗi ký tự vào phần dữ liệu của đầu ra, nó có mã hóa ký tự thực thi mặc định không? Có thể định cấu hình này không?

Trong bất kỳ cấu hình nào, có thể có mã hóa ký tự nguồn khác với mã hóa ký tự thực thi? (Điều đó sẽ gcc bao giờ chuyển mã giữa các mã hóa ký tự?)

Trả lời

11

Tôi không biết các tùy chọn này thực sự hoạt động tốt như thế nào (không sử dụng chúng atm; tôi vẫn thích xử lý các chuỗi ký tự là 'ASCII only'. tập tin bên ngoài anyway vì vậy nó chủ yếu là những thứ như chuỗi định dạng hoặc tên tập tin), nhưng họ đã thêm các tùy chọn như

-fexec-charset=charset 
Set the execution character set, used for string and character constants. The default 
is UTF-8. charset can be any encoding supported by the system's iconv library routine. 

-fwide-exec-charset=charset 
Set the wide execution character set, used for wide string and character constants. 
The default is UTF-32 or UTF-16, whichever corresponds to the width of wchar_t. As 
with -fexec-charset, charset can be any encoding supported by the system's iconv 
library routine; however, you will have problems with encodings that do not fit 
exactly in wchar_t. 

-finput-charset=charset 
Set the input character set, used for translation from the character set of the 
input file to the source character set used by GCC. If the locale does not specify, 
or GCC cannot get this information from the locale, the default is UTF-8. This can 
be overridden by either the locale or this command line option. Currently the command 
line option takes precedence if there's a conflict. charset can be any encoding 
supported by the system's iconv library routine. 
+0

tôi tự hỏi nếu khi src và mã hóa exec là UTF-8 mặc định, nó thực sự xác nhận chuỗi chữ cũng -formed UTF-8 và đưa ra một lỗi nếu nó chứa các chuỗi byte không hợp lệ - hoặc cho dù nó chỉ cho phép các byte không hợp lệ đi qua. –

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