【问题标题】:Powershell: echo "" > file.txt VS clear-content file.txt [duplicate]Powershell:回声“”> file.txt VS清除内容file.txt [重复]
【发布时间】:2014-03-24 18:29:16
【问题描述】:

根据我在 powershell 中清除文件的方式,我会得到垃圾。

echo "" > ".\file.txt"
OR
clear-content ".\file.txt"
THEN
[io.file]::AppendAllText("file.txt", "teststring")

使用 clear-content,我将在“file.txt”中获得“teststring”。

使用 echo "" > ".\file.txt",我得到垃圾汉字。

为什么? echo "" > 文件是否与编码混淆?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    Echo 是 Write-Output 的 Powershell 别名。

    我不确定将 Write-Output 的输出重定向到文件会导致什么结果。

    我可以复制你的结果,我得到了中文字符,但是文件的编码似乎是ASCII(我用这个函数测试了文件编码:http://poshcode.org/2059)。

    只需运行 echo "" > ".\file.txt" 在文件中放入 6 个字节:255、254、13、0、10、0 而运行 Set-Content .\file.txt "" 则放入 2 个字节:13、10。

    但我理解的问题是:为什么这个命令会导致这个输出。

    【讨论】:

    • ASCII 中的 10 和 13 是换行符和回车符,共同构成 Windows 行结尾,所以我猜 Set-Content 留下以 ASCII 编码结尾的标准行,并且 echo 在 2 中输出 3 个字符-bytes-per-character 编码,用于 unicode(可能)的 BOM 标记 ff fe,两字节换行和回车。你是怎么让它打开看到汉字的?
    • 我正在使用 baretail.exe 来检查显示中文字符的输出文件。
    • @TessellatingHeckler 实际上,0xfffe (ÿþ) 是 Unicode 编码的字节顺序标记(准确地说是小端编码的 UTF-16)。
    • @Ansgar Wiechers 谢谢。这解释了我们得到的“什么”。为什么将 Write-Output 重定向到文件会导致该输出?
    • @Ansgar Wiechers 实际上,您对问题的评论中的链接解决了原因。谢谢。
    猜你喜欢
    • 2020-06-18
    • 2012-07-31
    • 2020-01-09
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多