写入文件时Golang字符损坏

时间:2020-02-05 09:21:34

标签: string go

我运行这段代码

cmd := exec.Command(sArg[0], sArg[1:]...)
d, err := cmd.Output()
if len(arg) == 0 {
    return err
}
file.WriteString(string(d))

运行该字符串后,该字符串在调试控制台中打印良好,但是该字符在文件中损坏了。

原始输出

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile
    DisableNotifications    REG_DWORD    0x0
    EnableFirewall    REG_DWORD    0x1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\Logging

文件中的输出损坏

enter image description here

如何将字符正确写入文件?

1 个答案:

答案 0 :(得分:0)

如果我使用0d, 0a, 48, 4b, 45, 59, 4b, 4c, 4f, 43, 41, 4c, 5f, 4d, 61 43, 48并假设它是使用UTF-16-LE编码的,它将显示为਍䭈奅䱋䍏䱁䵟䍡,看起来与屏幕快照的第一部分相同。因此,在我看来,您的程序正确保存了数据,但您用来查看文件的应用程序错误地将其解释为UTF-16-LE编码。

这可能是由于您先前写入文件的任何原因引起的(您提到此数据将附加到先前写入的数据中)。如果前两个字节是FF,FE,则可以将其视为文件已UTF-16-LE编码的信号,但并非所有编辑器都可以识别。)

如果您在十六进制编辑器中打开文件,我希望您会看到预期的数据(即0d, 0a, 48, ...)。