Windows 简体版的 powershell 和 cmd 终于可以默认 utf-8 了

2018-05-02 19:39:39 +08:00
 LosLord

准确的说应该是整个系统默认 utf-8 了,但是我只测试了 powershell,不知道其他程序会不会出问题
终于可以看不见烦人的乱码了
感觉 Windows 确实一步步在向开发方向做优化

15289 次点击
所在节点    PowerShell
65 条回复
ZenFX
2018-05-02 20:28:39 +08:00
改了之后我的 IDM 界面上的文字就变成乱码了
avichen
2018-05-02 20:37:26 +08:00
用 powershell 6.0.1
geelaw
2018-05-02 20:43:12 +08:00
@PHPer233 #15 Unicode 并不能用 2 字节完全表示,有的时候需要用 surrogate pair。

@iwtbauh #13 看不出来 UTF-8 相比目前的 UCS-2 的好处是啥,大多数需要表示的字符只需要 2 字节(固定长度),这是一个非常难得的特性。我觉得下一步应该是改成 UTF-32。

最后,如果想要在 PowerShell 里面自动 65001 代码页,可以在 $PROFILE 里面加上一句 chcp 65001
iwtbauh
2018-05-02 20:46:46 +08:00
@geelaw UTF-8 兼容 ASCII,UTF-16 不兼容 ASCII。UTF-8 没有字节序区别,UTF-16 有字节序的区别。UCS-2 在需要时还是需要扩展到大于 2 字节
iwtbauh
2018-05-02 20:49:38 +08:00
@iwtbauh #23 当然对于 #13 中的问题并不存在字节序问题。
abcbuzhiming
2018-05-02 20:50:05 +08:00
@geelaw 因为体积,计算机世界里最多的字符串仍然是字母和数字,这些 UTF-8 只需要 1 个字节,而 UTF-16 需要两个,体积膨胀呢
des
2018-05-02 20:52:08 +08:00
@Arnie97 因为这两份"快乐"不能叠加在一起,手动狗头
LosLord
2018-05-02 20:52:11 +08:00
@k9982874
@avichen
@geelaw
不只是命令行,按理说是软件的默认编码都是 UTF-8 了,比如 vs 开发跨平台 C++默认是 GBK,现在默认是 UTF-8,还有 java 的 getBytes()是按照系统的默认编码获取的。改为 UTF-8 能避免很多问题
iwtbauh
2018-05-02 20:55:44 +08:00
@LosLord 现在版本的 vs 确实好很多了,旧版本 MSVC 对于 UTF-8 字符编码的源码文件支持太糟糕了。

但是就算源代码文件是 UTF-8,如果我没记错,MSVC 可能还是会把字符编译前转换成 ANSI (中文系统上就是 GBK 系),这就很难受。
LosLord
2018-05-02 21:04:59 +08:00
@ZenFX 我记得 IDM 有 UWP 版吧,没用过。

@iwtbauh 我也是初学 c++,以前用 IDEA 用的熟,现在用 CLion 了,感觉 VS 复杂了不少。
geelaw
2018-05-02 21:07:52 +08:00
@abcbuzhiming #26 不要活在自己的世界里——请问你有真实世界里字符串的统计吗?注意,并不是所有的字母都在 ASCII 范围内,比如希腊字母、希伯来字母和阿拉伯字母,此外,即使是拉丁字母也不全都能用 ASCII 表示;同样,数字除了 0123456789 还有其他的。

@iwtbauh 但是对于 #13 里的问题,似乎也不需要兼容 ASCII 吧——毕竟你的函数名字变了。

此外,几乎定长的性质很重要,否则切字符串、数字符个数都是很麻烦的事情。

@LosLord #28 大多数软件应该选择 internally 使用 UCS-2 (和 Win32 API 交互的时候),并在保存文件的时候明确指定编码,而不是依赖默认编码;所有这样正确设计的软件都不会受 locale 的影响。如果写程序的人假定用户会选择 UTF-8 作为默认代码页(更糟糕的是忘记测试 UTF-8 不是默认代码页的情况)且依赖默认代码页去获得 UTF-8 编码,他们可能会被 surprised ——因为这个世界上大多数人都是使用 non-UTF-8 作为默认代码页的。这个设置是用来兼容那些古早味软件的,which 使用 VerbNounA 系列 API。
geelaw
2018-05-02 21:09:17 +08:00
@iwtbauh #29 你可以查看 cl /?,里面有介绍 /utf-8 开关,可以把源代码和执行环境都设置为 UTF-8。
goreliu
2018-05-02 21:17:54 +08:00
看起来这个改动影响比较广泛,比如记事本的 ANSI 也变成 UTF-8 了,还有 .js/.vbs/.ahk 等代码文件的默认编码,可能会产生一些兼容性问题。
binbinyouliiii
2018-05-02 21:24:19 +08:00
@goreliu #33 抛弃记事本,使用 notepad++,从你我做起。整个系统编码的变化,影响肯定会不小,谁让微软留下了个中文系统使用 GBK 这个烂摊子呢。
goreliu
2018-05-02 21:26:09 +08:00
@binbinyouliiii 我自己倒不用记事本,但这样改后,gbk 的文件用记事本打开就变成乱码了,所以还是会产生一些直观的影响。
qq316107934
2018-05-02 21:28:36 +08:00
@iwtbauh 这个工作量可太大了,等下一次内核重构?可是记得微软说过 win10 是最后一个版本的 windows 系统,也不知道微软怎么想。
Arnie97
2018-05-02 21:38:52 +08:00
@qq316107934 因为变成滚动更新发行版了,滑稽
kokutou
2018-05-02 21:42:06 +08:00
@iwtbauh #24
utf-8 兼容 ascii 在软件第三方汉化里是个大坑。。。
多少软件因为这坑,汉字太长放不下。。。
kokutou
2018-05-02 21:43:13 +08:00
win7 的 bat 不支持 utf-8 怎么办。。。
强行所有 bat 全部转 powershell 么。。。
goreliu
2018-05-02 21:57:20 +08:00
@kokutou #39 改成 UTF-8 这个只是可选项,估计除了部分程序员,其他人很少会改吧,不用太考虑兼容性问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/451563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX