nhà phát triển phần mềm được ưa thích và các công ty (Joel Spolsky, Fog Creek software) có xu hướng sử dụng wchar_t cho Unicode nhân vật lưu trữ khi viết C hoặc C++. Khi nào và như thế nào nên sử dụng char và wchar_t đối với các phương pháp mã hóa tốt?sử dụng đúng dung lượng lưu trữ chuỗi trong C và C++
Tôi đặc biệt quan tâm đến việc tuân thủ POSIX khi viết phần mềm thúc đẩy Unicode.
Khi sử dụng wchar_t, bạn có thể tra cứu các nhân vật trong một loạt các ký tự rộng trên một cơ sở cho mỗi nhân vật hoặc mỗi mảng phần tử:
/* C code fragment */
const wchar_t *overlord = L"ov€rlord";
if (overlord[2] == L'€')
wprintf(L"Character comparison on a per-character basis.\n");
Làm thế nào bạn có thể so sánh byte unicode (hoặc ký tự) khi sử dụng char?
Cho đến nay tôi thích cách so sánh chuỗi và các nhân vật kiểu char trong C thường trông như thế này:
/* C code fragment */
const char *mail[] = { "ov€[email protected]", "ov€[email protected]" };
if (mail[0][2] == mail[1][2] && mail[0][3] == mail[1][3] && mail[0][3] == mail[1][3])
printf("%s\n%zu", *mail, strlen(*mail));
Phương pháp này quét tương đương byte của một ký tự unicode. Biểu tượng Unicode Euro € chiếm 3 byte. Vì vậy, một trong những nhu cầu để so sánh ba byte mảng byte để biết nếu các ký tự Unicode phù hợp. Thông thường, bạn cần phải biết kích thước của ký tự hoặc chuỗi bạn muốn so sánh và các bit mà nó tạo ra để giải pháp hoạt động. Điều này không giống như một cách tốt để xử lý Unicode cả. Có cách nào tốt hơn để so sánh các chuỗi và các yếu tố nhân vật thuộc loại char?
Ngoài ra, khi sử dụng wchar_t, cách bạn có thể quét nội dung tệp vào một mảng? Hàm fread dường như không tạo ra kết quả hợp lệ.
Unicode trong C++: không sử dụng 'wchar_t', sử dụng thư viện Unicode phù hợp. –
'có xu hướng sử dụng wchar_t cho mã hóa ký tự Unicode'. Không; họ sử dụng nó cho ký tự Unicode _storage_, và có một sự khác biệt lớn. –
có thể trùng lặp của [std :: wstring VS std :: string] (http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring) –