Golang Сломанные символы при записи файлов - PullRequest
0 голосов
/ 05 февраля 2020

Я запускаю этот код

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 голосов
/ 06 февраля 2020

Если я возьму 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, ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...