如何将文件列表作为 utf8 编码字符串放入 gnuplot?

如何将文件列表作为 utf8 编码字符串放入 gnuplot?

我需要一个目录的文件列表作为utf8gnuplot 中的编码字符串。

在 gnuplot 中,您可以通过 进行系统调用system(),它(就我有限的理解而言)只是调用cmd.exe并将字符串参数作为命令执行并返回系统调用的输出(stdout)。在下文中,我仅讨论 Windows。

示例 1: FILES = system('dir /b')

这将打开 Windows 控制台并显示当前目录中的文件列表。控制台随后将关闭。gnuplot 变量FILES将包含控制台上给出的文件名字符串。但是,此字符串无法正确表示字符,例如ä,ö,ü,ß,é,à,ñ,Ä,Ö,Ü,... 我需要的是文件列表作为utf8编码字符串。

此外,还有另一个 gnuplot 命令load '< ',它会将内容重定向到 gnuplot。

示例 2: load '< echo $Data ^<^<EOD & type "myFile.txt"'

这会将$Data <<EOD文件内容写入 gnuplot myFile.txt,即命名的 gnuplot 数据块$Data将包含文件的内容。

我的目标:

为了实现将目录的文件名转换为utf8编码字符串的目标,我只做到了这一点:

  1. 进行系统调用并将代码页更改为 65001(utf8)并将目录重定向到临时文件中,例如Temp.txt

    system('chcp 65001 && cmd.exe /c dir /b "Test\*.dat" > "Temp.txt"')

  2. 将临时文件加载Temp.txt到 gnuplot。

    load '< echo $Data ^<^<EOD & type "Temp.txt"'

这在某种程度上是可行的,但是,我不想通过磁盘上的临时文件使用绕行路线(另请参阅https://stackoverflow.com/q/65272771/7295599)我尝试过许多变化,例如使用几个cmd.exe实例或类似的方法>&1等等,但我还没有找到令人满意的解决方案的组合。

有什么想法可以在 Windows 下不使用临时文件来实现这一点吗?

答案1

这解决了:

print system('<con: chcp 65001 >nul & cmd.exe /c "dir /b Test\*.dat"')

相关内容