What is the alternative to the setlocale function of c in D? Thank you.
FrankLike
1150015857 at qq.com
Sun Jan 27 16:23:42 UTC 2019
On Sunday, 27 January 2019 at 10:44:04 UTC, John Chapman wrote:
> On Sunday, 27 January 2019 at 06:14:15 UTC, FrankLike wrote:
>> On Saturday, 26 January 2019 at 09:33:33 UTC, John Chapman
>> wrote:
>>
>>> What has that code got to do with setting the console's font?
>>> So you need to add more code to accomplish that.
>>
>> You don't need to set the font to achieve the goal, why not?
>
> This should work:
>
> const(char)[] toCodePage(const(char)[] s, uint codePage = 0) {
> import core.sys.windows.winnls, std.utf;
>
> foreach (char c; s) {
> if (c >= 0x80) {
> auto temp = s.toUTF16z();
> char[] result;
> if ((result.length = WideCharToMultiByte(codePage, 0,
> temp, -1, null, 0, null, null)) != 0)
> WideCharToMultiByte(codePage, 0, temp, -1, result.ptr,
> cast(int)result.length, null, null);
> return result;
> }
> }
> return s;
> }
>
> void main() {
> import core.sys.windows.wincon, std.stdio;
>
> SetConsoleOutputCP(936); // Simplified Chinese codepage
> writeln("字符".toCodePage(936));
> }
Yes.
////////////////////////////////////////
extern(C) int setlocale(int,char*);
static this()
{
import core.stdc.wchar_;
import core.stdc.stdio;
fwide(core.stdc.stdio.stdout,1);
setlocale(0,cast(char*)"china");
}
///////////////////////////////////////////
it's simple than yours,and don't need convert every string,why
not work after D2.0.78.1?
More information about the Digitalmars-d-learn
mailing list