Я не совсем профессионал с кодировками, но вот то, что я думаю, что знаю (хотя это может быть неправильно):
- ASCII - это 7-битная кодировка с фиксированной длиной, с символами, которые вы можете найти в диаграммах ASCII.
- UTF8 - это 8-разрядная кодировка переменной длины. Все символы могут быть записаны в UTF8.
- UCS-2 LE/BE - это 16-битные кодировки с фиксированной длиной, которые поддерживают большинство обычных символов.
- UTF-16 - это 16-разрядная кодировка переменной длины. Все символы могут быть записаны в UTF16.
Правильны ли они выше?
Теперь, для вопросов:
- Используют ли функции Windows "A" (например,
SetWindowTextA
) строки ASCII? Или "многобайтные строки" (подробнее об этом ниже)? - Используют ли функции Windows "W" строки UTF-16 или строки UCS-2? Я думал, что они принимают в UCS-2, но имена путают меня.
- В WideCharToMultiByte Microsoft использует слово "широкосимвольная строка" для обозначения UTF-16. В этом контексте то, что считается "многобайтовой строкой"? UTF-8?
- Является ли
LPWSTR
"широкосимвольной строкой"? Я бы сказал, что это так, но тогда это не означает, что это UTF-16? И разве это не означает, что его можно использовать для отображения, скажем, четырехбайтовых символов? Если нет, то... отображает 4-байтовые символы невозможным? (У Windows, похоже, нет API-интерфейсов для них.) - Является ли функциональность
WideCharToMultiByte
надмножеством функцииwcstombs
, и оба они работают над одним и тем же типом строки? Или один, скажем, работает на UTF-16, а другой работает на UCS-2? - Являются ли пути к файлам в UTF-16 или UCS-2? Я знаю, что Windows рассматривает его как "непрозрачный массив символов" из документации Microsoft, но по стандарту C для таких функций, как
fwprintf
, есть ли стандартизованная кодировка? - Что такое кодировка "ANSI"? Это даже правильный термин? И как это связано с ASCII?
- (У меня было больше вопросов, но этого достаточно... Я все-таки забыл некоторые из них).
Это много вопросов, поэтому также будут приветствоваться любые ссылки на объяснения о том, как все эти соединения (помимо чтения стандарта Unicode, который не поможет в Windows API).
Спасибо!