Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Golang在写入文件时出现断字符_String_Go - Fatal编程技术网

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
。。。因此,您的结果应该没有理由。如何创建
文件
?提示:有一个函数,它接受
[]字节
作为参数。这可以避免您先将其转换为字符串。谢谢,所以我发现了这个问题。以下是关于这个问题的一些发现。如果您看到并回答问题,我将不胜感激。