String Golang在写入文件时出现断字符
我运行这个代码String Golang在写入文件时出现断字符,string,go,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\Para
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
文件中的中断输出
如何将字符正确写入文件?如果我采用
0d、0a、48、4b、45、59、4b、4c、4f、43、41、4c、5f、4d、61、43、48
并假设它是使用此编码的,则显示为䭈奅䱋䍏䱁䵟䍡 这看起来和你截图的第一部分差不多。因此,在我看来,您的程序正确地保存了数据,但用于查看文件的应用程序错误地将其解释为UTF-16-LE编码
这可能是由于您之前写入文件的内容(您提到此数据将附加到先前写入的数据中)。如果前两个字节为FF,FE,则可以将其视为文件已编码的信号,但并非所有编辑器都能识别出这一点)
如果在十六进制编辑器中打开文件,我希望您能看到预期的数据(即
0d、0a、48、
…)d的前16个字节的值是多少?它看起来像ascii还是unicode?@byxor~16字节是[]uint8{13,10,72,75,69,89,75,76,79,67,65,76,95,77,65,67,72}。传输十六进制…{0d,0a,48,4b,45,59,4b,4c,4f,43,41,4c,5f,4d,61 43,48}字节看起来很好,并转换为\r\nHKEYKLOCAL\u MACH
。。。因此,您的结果应该没有理由。如何创建文件
?提示:有一个函数,它接受[]字节
作为参数。这可以避免您先将其转换为字符串。谢谢,所以我发现了这个问题。以下是关于这个问题的一些发现。如果您看到并回答问题,我将不胜感激。