Когда я использую Perl или C для printf
некоторых данных, я пробовал их формат для управления шириной каждого столбца, например
printf("%-30s", str);
Но когда str содержит китайский символ, столбец не выравнивается должным образом. см. прикрепленную картинку.
Кодировка моего ubuntu - zh_CN.utf8, насколько я знаю, кодировка utf-8 имеет длину 1~4 байта. Китайский иероглиф имеет 3 байта.В моем тесте я обнаружил, что элемент управления форматом printf считает китайский символ равным 3, но на самом деле он отображается как ширина 2 ascii.
Таким образом, реальная ширина экрана не является константой, как ожидалось, а является переменной, связанной с количеством китайских символов, т. е.
Sw(x) = 1 * (w - 3x) + 2 * x = w - x
w — ожидаемое ограничение ширины, x — количество китайских символов, Sw(x) — это реальная ширина экрана.
Таким образом, чем больше китайских символов содержит строка, тем короче она отображается.
Как я могу получить то, что хочу? Считать китайские иероглифы перед printf?
Насколько я знаю, все китайские или даже все широкие символы, я думаю, отображаются как ширина 2, тогда почему printf считает их шириной 3? Кодировка UTF-8 не имеет ничего общего с длиной экрана.