如何正确地将标准输入中的非 ascii 写入文件
How to write non-ascii from stdin to file properly
#include <stdio.h>
#include <windows.h>
int main(int argc, char** argv)
{
DWORD bytes_read;
char buffer[65536];
LPSTR str;
ReadFile(GetStdHandle(STD_INPUT_HANDLE), buffer, 65536, &bytes_read, NULL);
str = malloc(bytes_read);
memcpy(str, buffer, bytes_read);
FILE *f = fopen("file.txt", "w");
fprintf(f, "stdin: %s", str);
fprintf(f, "hardcoded: %s\n", "á");
fclose(f);
return 0;
}
当通过 echo á|.\Program.exe
在 powershell 中 运行 时,file.txt 的内容是:
stdin: ?
ýýýýhardcoded: á
我有兴趣用从标准输入中检索到的正确字符替换问号
Stdin 显然使用的是 CP437 字符集。使用此编码重新加载文件显示正确的字符
#include <stdio.h>
#include <windows.h>
int main(int argc, char** argv)
{
DWORD bytes_read;
char buffer[65536];
LPSTR str;
ReadFile(GetStdHandle(STD_INPUT_HANDLE), buffer, 65536, &bytes_read, NULL);
str = malloc(bytes_read);
memcpy(str, buffer, bytes_read);
FILE *f = fopen("file.txt", "w");
fprintf(f, "stdin: %s", str);
fprintf(f, "hardcoded: %s\n", "á");
fclose(f);
return 0;
}
当通过 echo á|.\Program.exe
在 powershell 中 运行 时,file.txt 的内容是:
stdin: ?
ýýýýhardcoded: á
我有兴趣用从标准输入中检索到的正确字符替换问号
Stdin 显然使用的是 CP437 字符集。使用此编码重新加载文件显示正确的字符