How do you get unicode support on terminal input to Visual D program?

Adam D. Ruppe destructionator at gmail.com
Fri May 8 02:10:31 UTC 2020


On Friday, 8 May 2020 at 01:54:42 UTC, Fruitful Approach wrote:
> I'm writing a type theory interpreter, so the character `λ` is 
> used a lot.  I am able to print it, but `readln()` converts the 
> char to `\0` so my program crashes.

There's a few possible answers depending on what exactly you're 
doing.

Someone is sure to say "call SetConsoleCP(65001);` and while that 
kinda sorta works, it isn't great because it has side effects, 
but is probably the easiest thing to try and might work for you.

You can also call ReadConsoleW and get a wstring, this works well 
unless your program is piped... which Visual D might do, I'm not 
sure. If it is piped you need to handle that differently with an 
if branch. This is the next least invasive.

There's my terminal.d which also needs an if branch for pipes but 
it supports all the input cross-platform with other niceties too

https://github.com/adamdruppe/arsd

or if you use dub

https://code.dlang.org/packages/arsd-official%3Aterminal

example:
http://dpldocs.info/experimental-docs/arsd.terminal.html#get-line


And it somewhat recently includes facilities to pop up its own 
gui window as well, use dub subConfiguration "builtin_emulator" 
to give that a try.

Most invasive but you might like the results.


More information about the Digitalmars-d mailing list