Я пытаюсь выяснить, какова ожидаемая кодировка аргумента wcwidth()
. Страница руководства абсолютно ничего не говорит об этом, и я потратил впустую часы, пытаясь выяснить, что это такое. Вот пример, в C:
#include <stdio.h>
#include <wchar.h>
void main()
{
wchar_t c = L'h';
printf("%d\n", wcwidth(c));
}
Я хочу знать, как я должен кодировать этот символьный литерал, чтобы эта программа печатала 2
вместо -1
.
Вот Rustпример:
extern "C" {
fn wcwidth(c: libc::wchar_t) -> libc::c_int;
}
fn main() {
let c = 'h';
println!("{}", unsafe { wcwidth(c as libc::wchar_t) });
}
Точно так же я хочу преобразовать эту символьную константу в wchar_t
(i32), чтобы эта программа печатала 2
.
Спасибо.
ОБНОВЛЕНИЕ: Извините за мою формулировку, я сделал этот звук специфичным для длинных букв C. Я хочу кодировать символьные литералы на любом языке как 32-разрядное целое число, чтобы при передаче его в wcwidth
я получил правильный ответ. Поэтому мой вопрос не относится к длинным символам C или C.
ОБНОВЛЕНИЕ 2: Я также был бы рад другой функции, такой как wcwidth
, которая лучше определена (и, возможно, даже независима от платформы). Например, тот, который принимает символ в кодировке UTF-8 и возвращает количество столбцов, необходимых для его рендеринга в моно-космическом терминале.