一旦我使用
setlocale(LC_ALL, ""); //use system locale
printf函数没有正确对齐。如何在不同的区域设置中对齐字符串?
答案 0 :(得分:2)
现场宽度不能用于现代多语言系统的对齐。即使printf
在对齐时可以计算字符而不是字节(注意:宽printf
- 族函数可以这样做),这将无法适应组合字符(通常不使用水平空格)以及CJK范围的字符(通常在终端上使用2列)。
我能想到的最好方法是首先将字符串转换为wchar_t
字符串,然后使用wcswidth
确定字符单元格列中的宽度。然后使用带有参数%.*s
和n
的{{1}}字段说明符在字段之前或之后添加适当数量的空格,其中""
是要显示的空格数。