准确的说应该是整个系统默认 utf-8 了,但是我只测试了 powershell,不知道其他程序会不会出问题
终于可以看不见烦人的乱码了
感觉 Windows 确实一步步在向开发方向做优化
1
Nitroethane 2018-05-02 19:43:04 +08:00 via Android
这不算默认吧,还得自己手动启用
|
2
hljjhb 2018-05-02 19:44:45 +08:00 via Android
痛点!
|
3
orangeade 2018-05-02 19:45:32 +08:00
还带 BOM 吧
|
4
LosLord OP @Nitroethane "终于可以默认了",以前改起来很烦的
|
5
12101111 2018-05-02 19:48:39 +08:00 via Android
这是哪个 build 有的功能
|
8
kikyous 2018-05-02 19:52:35 +08:00 via Android
微软还算发奋图强,只有苹果要死不活的
|
9
Arnie97 2018-05-02 19:54:51 +08:00 via Android
Unicode 也好,BOM 也好,明明都是我巨硬先实现的,但是,为什么,会变成这样呢…
|
11
dexterzzz 2018-05-02 20:08:16 +08:00
去翻看 unicode 标准,标准组织专门来为了反微软而反.
|
12
iwtbauh 2018-05-02 20:09:04 +08:00 1
@Arnie97
UTF-8 是 1992 年发明的,但 Windows 从 NT 3.1 也就是 1993 年才转为使用 UTF-16 ( UCS-2 ) Unicode 只是字符映射方案,UTF-8,UTF-16,UTF-32 都是 Unicode 的实现 所以什么时候成了 MS 先实现 Unicode 的了? 参考: http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt |
13
iwtbauh 2018-05-02 20:11:44 +08:00
总算有点进步,但什么使用 Windows 的系统 API 能原生支持 UTF-8 了这个系统才能让人舒服点编程,Win APi 只能使用 ANSI 字符编码( XxxxA )或者 UTF-16 编码( XxxxW )
|
14
kamen 2018-05-02 20:12:11 +08:00 1
windows 都快默认 utf-8 了,美国还在使用英制单位
|
15
PHPer233 2018-05-02 20:15:50 +08:00 via iPhone
直接存储 Unicode 码值多好,2 个字节就可以搞定,非要用 UTF-8 的 3 个字节。
|
16
iwtbauh 2018-05-02 20:18:05 +08:00
@PHPer233 首先两个字节的是 UTF-16 不是 Unicode,而且英文字母 UTF-8 一个字节,UTF-16 是两个字节。另外 UTF-16 还像 CPU 一样有字节序的区别
|
17
Arnie97 2018-05-02 20:18:19 +08:00 via Android
@iwtbauh 所以你的意思是你是 Plan 9 用户?我只是在开发者常用的几个系统里对比,何况我说的是先,不是最先
|
18
goreliu 2018-05-02 20:23:46 +08:00
在 powershell 里输入中文显示有问题,其他的还好,在 WSL 里运行有中文输出的命令终于不用转编码了。
|
20
k9982874 2018-05-02 20:28:03 +08:00 via iPhone
cmder 了解一下
|
21
ZenFX 2018-05-02 20:28:39 +08:00
改了之后我的 IDM 界面上的文字就变成乱码了
|
22
avichen 2018-05-02 20:37:26 +08:00
用 powershell 6.0.1
|
23
geelaw 2018-05-02 20:43:12 +08:00
|
24
iwtbauh 2018-05-02 20:46:46 +08:00 via Android
@geelaw UTF-8 兼容 ASCII,UTF-16 不兼容 ASCII。UTF-8 没有字节序区别,UTF-16 有字节序的区别。UCS-2 在需要时还是需要扩展到大于 2 字节
|
26
abcbuzhiming 2018-05-02 20:50:05 +08:00
@geelaw 因为体积,计算机世界里最多的字符串仍然是字母和数字,这些 UTF-8 只需要 1 个字节,而 UTF-16 需要两个,体积膨胀呢
|
28
LosLord OP |
29
iwtbauh 2018-05-02 20:55:44 +08:00 via Android
@LosLord 现在版本的 vs 确实好很多了,旧版本 MSVC 对于 UTF-8 字符编码的源码文件支持太糟糕了。
但是就算源代码文件是 UTF-8,如果我没记错,MSVC 可能还是会把字符编译前转换成 ANSI (中文系统上就是 GBK 系),这就很难受。 |
30
LosLord OP |
31
geelaw 2018-05-02 21:07:52 +08:00 1
@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。 |
32
geelaw 2018-05-02 21:09:17 +08:00
@iwtbauh #29 你可以查看 cl /?,里面有介绍 /utf-8 开关,可以把源代码和执行环境都设置为 UTF-8。
|
33
goreliu 2018-05-02 21:17:54 +08:00
看起来这个改动影响比较广泛,比如记事本的 ANSI 也变成 UTF-8 了,还有 .js/.vbs/.ahk 等代码文件的默认编码,可能会产生一些兼容性问题。
|
34
binbinyouliiii 2018-05-02 21:24:19 +08:00
@goreliu #33 抛弃记事本,使用 notepad++,从你我做起。整个系统编码的变化,影响肯定会不小,谁让微软留下了个中文系统使用 GBK 这个烂摊子呢。
|
35
goreliu 2018-05-02 21:26:09 +08:00
@binbinyouliiii 我自己倒不用记事本,但这样改后,gbk 的文件用记事本打开就变成乱码了,所以还是会产生一些直观的影响。
|
36
qq316107934 2018-05-02 21:28:36 +08:00 via Android
@iwtbauh 这个工作量可太大了,等下一次内核重构?可是记得微软说过 win10 是最后一个版本的 windows 系统,也不知道微软怎么想。
|
37
Arnie97 2018-05-02 21:38:52 +08:00 via Android
@qq316107934 因为变成滚动更新发行版了,滑稽
|
38
kokutou 2018-05-02 21:42:06 +08:00
|
39
kokutou 2018-05-02 21:43:13 +08:00
win7 的 bat 不支持 utf-8 怎么办。。。
强行所有 bat 全部转 powershell 么。。。 |
41
geelaw 2018-05-02 22:00:08 +08:00
@kokutou #39 Batch 必须是 OEM 代码页编码的,要获取 OEM 代码页,你可以
Get-ItemPropertyValue HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage OEMCP |
42
Narcissu5 2018-05-02 22:22:13 +08:00
好像当时使用 GBK 是政府强制的,还好这么多年 GBK 总算凉了
|
45
Zzde 2018-05-02 22:54:32 +08:00 via iPhone
cmd 字体舍什么 默认吗
|
46
goreliu 2018-05-02 23:01:12 +08:00
改为后,若干中文界面的小软件乱码了,比较麻烦,不过基本不是太常用的软件。
|
48
Remember 2018-05-03 04:55:05 +08:00
cmd 的默认字体可以改了么?
|
49
abc612008 2018-05-03 08:00:23 +08:00 via Android
勾上之后电脑就不能开机了……
|
50
LosLord OP |
51
ershiwo 2018-05-03 09:43:38 +08:00
老 gal 在 utf-8 下肯定是没戏正常运行的了(
不过还没试 locale emulator 能不能让它们正常跑起来。所以说普通人还真不一定能注意到这个改动。 |
52
BOYPT 2018-05-03 10:05:48 +08:00
嗯 改了之后 xshell 乱码了,用英文界面吧。
|
53
goreliu 2018-05-03 10:09:56 +08:00
|
54
yksoft1 2018-05-03 10:31:15 +08:00
@iwtbauh 关键是 CRT 也不支持啊。Linux 下 string.h 里面所有的东西都能支持 utf8,win 可不可能
|
55
goreliu 2018-05-03 10:41:02 +08:00
|
56
goreliu 2018-05-03 11:14:30 +08:00
接楼上。文件用 UTF-8 编码,调用 MessageBoxA 函数。
#include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBoxA(0, "Hello 测试 ヘッドセット 한국어", "测试", MB_ICONINFORMATION); return 0; } https://i.loli.net/2018/05/03/5aea7def1e93c.png 以前的话,因为韩语不在 GBK 里,必须用 MessageBoxW 才能正常显示。 |
60
MeteorCat 2018-05-03 13:42:50 +08:00
有没有人和我一样打开文件仅仅修改几个文件,编译程序的时候全部都是要求把编码给换了....................
|
61
Humorce 2018-05-03 13:44:29 +08:00
开启后 KeePass 出错。
|
62
UnknownR 2018-05-03 14:43:54 +08:00
常年英文版飘过。。。刚刚还遇到了编码问题,powershell 默认 out-file 不支持 utf-16 也是蛮蛋疼的,中文系统传过来的文件还要删除 utf-16 的 FF 和 FE 头才能正常映射
|
64
redapple02041 2018-05-05 12:16:35 +08:00
字体那么好看了吗
|
65
LosLord OP @redapple02041 我改成黑体了,4K 屏幕,锯齿也会小很多
|