如何解决如何从 TCL 中的 Windows exec 输出转换字符编码
我简直要气死了。我已经阅读了所有内容:答案、维基和手册页,但运气不佳。
我需要在保留完整字符本地化的 TCL 脚本中转换从 Windows 命令返回的输出,我的意思是“exec”命令的输出。
那么,让我们说:
catch { exec cmd.exe /C dir } _output
puts $_output
这将打印任何未正确显示的本地化字符。
有什么建议可以解决这个问题吗?
感谢您的时间。
解决方法
如果编码在默认情况下不正确——它与 encoding system
的结果不同,后者也是文件名和输入操作系统的其他杂项字符串的编码——那么你不能使用 exec
。但一切都没有丢失。用这个代替 exec
:
# Open as a binary pipeline
set f [open |[list cmd.exe /C dir] "rb"]
set data [read $f]
close $f
现在您拥有命令中的文字字节,无论它们是什么,并且可以使用 encoding convertfrom
处理混乱,可能在 regexp
和 {{ 的帮助下1}} 等,根据需要对该字符串进行切片和切块。毕竟,Tcl 中的二进制数据只是另一种字符串。
如果您只是使用它来列出文件名,请改用内置的 string range
命令。它的速度要快得多,并且避免了所有这些问题,除非在最奇怪的情况下(例如使用错误的文件系统级元数据的奇怪外部设备)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。