我需要一个目录的文件列表作为utf8
gnuplot 中的编码字符串。
在 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
编码字符串的目标,我只做到了这一点:
进行系统调用并将代码页更改为 65001(utf8)并将目录重定向到临时文件中,例如
Temp.txt
system('chcp 65001 && cmd.exe /c dir /b "Test\*.dat" > "Temp.txt"')
将临时文件加载
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"')