Я только что понял, что (благодаря моему университетскому курсу) многие вещи, которые, как мне казалось, я знал о юникоде, были неверны. Таким образом, я начал читать и закреплять свои знания, и сразу же возникли следующие сомнения, поигравшись с простой программой «Hello world» на C++ в MSVC2012:
#include <iostream>
#include <string.h>
using namespace std;
int main(void) {
char arr1[] = "I am a nice boy"; // Is this stored as UTF-8 (multi-byte) or ASCII?
char arr[] = "I'm a nice èboi"; // All characters should be ASCII except the 'è' one, which encoding is used for this?
cout << strlen(arr); // Returns 15 as ASCII, why?
// If I choose "multi-byte character set" in my VS project configuration instead of "unicode", what does this mean and what
// will this affect?
char arr2[] = "I'm a niße boy"; // And what encoding is it used here?
cout << strlen(arr2); // Returns 1514, what does this mean?
// If UTF-32 usually use 4 bytes to encode a character (even if they're not needed), how can a unicode code point like U+FFFF
// (FFFF hexadecimal is 65535 in decimal) represent any possible unicode character if the maximum is FFFF ? (http://inamidst.com/stuff/unidata/)
return 0;
}
Вышеупомянутое было скомпилировано с «многобайтовым набором символов», но, поскольку многобайтность — это тип кодировки Unicode, я думаю (?), Даже это не ясно.
Может ли кто-нибудь помочь мне с четкими объяснениями по приведенным выше вопросам?