微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows版本的wcswidth_l

我有一些文本写入到Windows控制台,我需要知道列的真正宽度。 wcswidth_l似乎是有它的平台上的最佳select(虽然mbswidth_l()会更好,因为我不想使用wchar_t,但由于某种原因它不存在)。 但除了其他平台之外,我还需要一些可以在Windows上运行的东西。 虽然这不太可能有一个便携式的解决scheme,我不知道任何Windows上的解决scheme。 我认为控制台有一个获取光标位置的API,所以我可以写出文本并检查位置的变化。 我想这是准确的,但写出额外的输出是不可接受的。

在Windows上如何获取string或字符的列宽?

编辑:

wcswidth_l返回用于显示string的控制台列数。 一些字符占据一列,而另外一些字符如日文字符则占两位。

Qt5打开与gui应用程序的控制台

Windows – 无线控制台输出可能导致系统嘟嘟声?

抓取程序的控制台输出

是否有可能使用Windows原始inputAPI没有窗口(即从控制台应用程序)?

处理桌面位置,字体和其他win32控制台参数

作为例子,“aあ”的“​​列宽”是四个。 “a”是一个,“是”,“a”是两个。 (假设控制台设置为实际显示非ascii字符)。 如果API支持使用代码页65001(UTF-8)的string,那也不错。

导轨控制台不起作用

如何检查在我的程序运行的控制台上设置了什么字符编码?

保持滚动条冻结win32控制台应用程序

运行没有pipe理员权限的jar文件

有没有办法使窗口输出ansi转义序列

首先,Windows控制台API位于此处 。

其次,你正在寻找GetConsoleFontSize函数吗?

我会尽力快速地在一秒钟内输入一个例子。

编辑:在这里你走。 原谅我,如果有一个错误。 实际上我发现它更容易。 GetCurrentConsoleFont在获取索引传递给GetConsoleFontSize的方式中填充一个COORD结构,所以步骤保存:)

#define _WIN32_WINNT 0x0501 //XP,0x0601=windows 7 #include <windows.h> int main() { HANDLE hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE); CONSOLE_FONT_INFO cfi; GetCurrentConsoleFont (hStdOutput,FALSE,&cfi); //cfi.dwFontSize.X == x size //cfi.dwFontSize.Y == y size }

编辑:

如果你不介意看不见的输出,你可以使用CreateConsoleScreenBuffer在你的命令上有一个隐形的控制台窗口,而不会影响你的命令。 GetConsoleScreenBufferInfoEx会告诉你光标的位置,在这一点你可以使用WriteConsole写入你的缓冲区(不可见的),然后再次检查光标的位置与实际写入的字符的数量。 请注意,事先检查光标位置不需要清除屏幕以使用此方法

如果你不能做额外的输出,可见或不可见,我不确定是否有可能。

便携的方法

由于字符的宽度更多取决于字符本身,而不是显示它们的系统(好的,可能有exceltions,但它们应该是相当罕见的),可以使用单独的函数来做到这一点(在Windows上)。 这需要Unicode字符,因为它使得分析字符串的宽度变得更容易,但是肯定的是可以编写一个包装来在编码之间进行转换。

可用的实现

这里是适合的和可移植的实现,哪一个可以插入他的应用程序,并回退到Windows上使用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐