【问题标题】:printf("%-10s") works wrong in system localeprintf("%-10s") 在系统语言环境中工作错误
【发布时间】:2012-07-11 00:42:33
【问题描述】:

我用过一次

setlocale(LC_ALL, ""); //use system locale

printf 函数未正确对齐。如何在不同的语言环境中对齐字符串?

【问题讨论】:

  • 请发布您正在使用的完整示例 + 编译器 + 操作系统
  • OP的问题不是很清楚,但我想我能够弄清楚预期的含义。

标签: c utf-8 locale printf


【解决方案1】:

字段宽度不能用于现代多语言系统上的对齐。即使printf 可以在对齐时计算字符而不是字节(注意:宽 printf-family 函数可以做到这一点),这将无法适应组合字符(通常不使用水平空间)以及 CJK-宽字符(通常在终端上使用 2 列)。

我能想到的最佳方法是首先将您的字符串转换为wchar_t 字符串,然后使用wcswidth 确定其在字符单元格列中的宽度。然后使用带有参数n""%.*s 字段说明符在字段之前或之后添加适当数量的空格,其中n 是您要显示的空格数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多