-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
os-windowsstandard libraryThis issue involves writing Zig code for the standard library.This issue involves writing Zig code for the standard library.
Milestone
Description
Tracking issue for how, on Windows, just using ReadFile
will completely corrupt UTF-16 data.
Instead, you have to use ReadConsoleW
.
For example:
extern "kernel32" fn ReadConsoleW(handle: os.fd_t, buffer: [*]u16, len: os.windows.DWORD, read: *os.windows.DWORD, input_ctrl: ?*c_void) i32;
extern "kernel32" fn SetConsoleOutputCP(cp: os.windows.UINT) i32;
// ...
assert(SetConsoleOutputCP(65001) != 0); // display outputted utf8 correctly in the console
var stdin = io.getStdIn().handle;
var data: [256]u16 = undefined;
var read: u32 = undefined;
const ok = ReadConsoleW(stdin, &data, data.len, &read, null); // type in '안녕'
assert(ok != 0);
var utf8: [1024]u8 = undefined;
const utf8_len = try unicode.utf16leToUtf8(&utf8, data[0..read]);
const s = utf8[0..utf8_len];
print("'{}'\n", .{s}); // prints out '안녕
// '
As noted by @fengb, this may mean Zig needs to have a special InStream
for the console.
doongjohn
Metadata
Metadata
Assignees
Labels
os-windowsstandard libraryThis issue involves writing Zig code for the standard library.This issue involves writing Zig code for the standard library.