Wired question related with Chinese characters

Adam D. Ruppe destructionator at gmail.com
Sun Mar 22 16:12:34 UTC 2020


On Sunday, 22 March 2020 at 15:19:13 UTC, walker wrote:
> writeln(var1);

writeln calls the wrong function for the Windows console.

You can kinda hack it by changing the code page like Steven said 
(which has other bugs though, but works for many cases), or you 
can call the correct function - WriteConsoleW - yourself instead.

https://docs.microsoft.com/en-us/windows/console/writeconsole

---
import core.sys.windows.windows;

wstring s = ""w; // note it is a wstring, not a string
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), s.ptr, cast(DWORD) 
s.length, null, null);
---

my terminal.d library also calls that function but it isn't 
likely to 100% work with Chinese characters either due to other 
bugs. still you can try it if you like

https://github.com/adamdruppe/arsd/blob/master/terminal.d

---
import arsd.terminal;

void main()
{
Terminal terminal = Terminal(ConsoleOutputType.linear);
string var1 = "你好"; // I might have broken this in copy/paste
terminal.writeln(var1); // could work.
}
---

that should work if you have the fonts set up already but just it 
migh have other bugs so I kinda suggest just doing your own write 
function.

readln in the stdlib is similarly broken btw.


More information about the Digitalmars-d-learn mailing list