xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
10.04k stars 785 forks source link

Consider use utf-8 as multi byte encoding #467

Closed OpportunityLiu closed 5 years ago

OpportunityLiu commented 5 years ago

Is your feature request related to a problem? Please describe.

Describe the solution you'd like

    add_defines( "UNICODE", "_UNICODE")
    add_cxflags("/execution-charset:utf-8")

Define UNICODE in xmake core, use *W _w* api, regard all char* as utf-8

OpportunityLiu commented 5 years ago

see https://github.com/OpportunityLiu/xmake/tree/utf8

OpportunityLiu commented 5 years ago

我在这里搞了个例子,应该属于比较极端的情况了 https://github.com/OpportunityLiu/xmake/tree/utf8/%E7%A8%8B%E5%BA%8F

waruqi commented 5 years ago

xmake.lua里面路径传入硬编码中文,原本就是不支持的,一般很少有项目这么搞,也不建议这么写,所以我一直懒得去支持这种情况。。

对于`add_files("*.c")去匹配中文路径,之前处理过,应该是能够处理匹配中文路径的

而对于中文路径在mingw/gcc的报错中显示乱码,应该跟终端显示的编码设置有关,目前我这边两个系统下测试了,默认都是显示正常,我重新又装了个cygwin/mingw-gcc测试了下,也ok,这边暂时没有复现这个情况。可以尝试切换下终端显示的默认编码设置试试。

Snip20190624_2

OpportunityLiu commented 5 years ago

我知道chcp65001可以用。。。

OpportunityLiu commented 5 years ago

这是一个Feature request,不是bug report

OpportunityLiu commented 5 years ago

顺便,上面 那个测试,在linux一点问题都没有

OpportunityLiu commented 5 years ago

Win10也可以通过这个解决问题(不过其他程序有可能炸就是了) 图片

waruqi commented 5 years ago

Win10也可以通过这个解决问题(不过其他程序有可能炸就是了)

对于终端中文输出乱码,尝试单独只改 终端设置里面的 显示编码呢?

而lua脚本里面硬编码中文的支持,个人感觉必要性不是很大,虽然这块支持上的话,也是锦上添花,如果改动量不大的话,加上支持 也可以。

OpportunityLiu commented 5 years ago

这块我提个PR试试吧,感觉还是挺好的

中文一般不会有人这么搞,但是西欧语言的话很多开发者喜欢用带音调的字母

OpportunityLiu commented 5 years ago

看Unicode测试的ci输出

OpportunityLiu commented 5 years ago

重定向到文件的时候应该转成getconsoleoutputcp再写,而不能直写utf8

OpportunityLiu commented 5 years ago

xmake现在读文件会探测编码了没关系,但是其他程序并不会。。 比如vs和PowerShell

使用 FastHub 从我的 ONEPLUS A6010 发送

waruqi commented 5 years ago

重定向到文件的时候应该转成getconsoleoutputcp再写,而不能直写utf8

重定向的编码这块是还没处理呢,原本就打算之后再完善的,那正常编译出错现在显示还乱码么?还是你之前说的错误乱码就是重定向后导致的问题?

你这是因为在vscode下,给捕获了重定向后编译错误,然后里面显示乱码了吗?

OpportunityLiu commented 5 years ago

对啊,你看ci里测试输出也全是乱码

waruqi commented 5 years ago

我现在只要确认正常终端下编译输出,非重定向下无乱码就行了

ci的重定向乱码我之前就看到了,原本就打算后面抽空再完善的,所以之前暂时没去管它。

OpportunityLiu commented 5 years ago

其实更优的方案是写bom再直写UTF8,这样可以避免一些文字当前console output cp表示不了变成问号,但是也有问题,就是如何确认你拿到的流不是二手的(比如>>重定向,比如你是子进程)或者stdout和stderr合并重定向到一个文件。这些没法探测就会在文件中间插入bom

waruqi commented 5 years ago

插入bom暂时不考虑了 >> 这种肯定处理不了

waruqi commented 5 years ago

我加上console output cp的处理了。。你本地再试试,ci上显示效果至少跟你这边之前的效果一样了,虽然没乱码,但都显示?了。。想要进一步完善,除了插bom以外,如果没啥好的解决办法,只能先这样了。。

OpportunityLiu commented 5 years ago

应该可以了

waruqi commented 5 years ago

那这里我先close了,等回头有其他问题或者改进点,可以再开issues。。

waruqi commented 3 years ago

生成 vs 工程似乎单纯 utf8 编码还不行,必须要带 bom 的 utf8 。。https://github.com/xmake-io/xmake/issues/1689