惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
Help Net Security
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
N
News | PayPal Newsroom
V2EX - 技术
V2EX - 技术
博客园 - 【当耐特】
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
有赞技术团队
有赞技术团队
S
Schneier on Security
S
SegmentFault 最新的问题
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives
IT之家
IT之家
Project Zero
Project Zero
博客园 - 司徒正美
P
Privacy International News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Jina AI
Jina AI
Security Latest
Security Latest
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
NISL@THU
NISL@THU
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity

中二病

求助, 21 世纪 20 年代初左右 - V2EX 一直在做一个很长很长的梦 - V2EX 靠 ddos 攻击小网站获取成就感的脚本“大佬” - V2EX 如何在这个时代 生存 幂律时代生存! - V2EX 总觉得自己活在梦里或者类似缸中脑 - V2EX 想去上海写代码了...总感觉深圳离家远,也不方便 - V2EX 各位大佬,要不要努力考公务员呢,迷茫中 - V2EX 等时音频,双耳搏动是伪科学吗 - V2EX 求大佬推荐路由器,能自定义条件踢掉弱连接用户~ - V2EX 一个好玩的数学题,大家来做一做,我已被搞疯!求高手解答哪儿逻辑错了 - V2EX 请别打扰我,我正在穿越异世界 - V2EX 时隔十四个月再次进入理发店 - V2EX 刺客伍六七! - V2EX 很暴力的动漫有人喜欢这类型的嘛 - V2EX 没事 - V2EX 来来来听声优喊 SQL injection 啦 - V2EX nothing special - V2EX 好烦啊,要不要找gf呢 - V2EX crying.我命令你们陪着我。不然就代表月亮消灭你。:-) - V2EX dont know to know the boy - V2EX sb - V2EX 有没有想创作点东西(漫画)的朋友? - V2EX test 当地的“神人”到底 是真是假? - V2EX 不会编程,不会代码,会一些简单命令,怎么学习前端? - V2EX 把 chrome 的 t-rex-runner 弄成摸鱼的插件了。。 - V2EX 昨天第一次买彩票就中了。。 - V2EX 在公司下载了未经授权的软件,会被开除吗 - V2EX 招商证券 app 智障 - V2EX 今天 214,打算早点下班回去过节 - V2EX 结婚 - V2EX 我发现,现在网上这些算命的东西还挺准的! - V2EX 男人和家庭是不是冲突? - V2EX 你们都玩什么社区、论坛、博客啊? - V2EX 我就想找个地方挂点东西,请无视标题 - V2EX Visual Assist 的 Case Number 有人见过吗? - V2EX 我的 左耳 AirPods 丢了 - V2EX 有关注 b 站“哲学”的哲学家吗 - V2EX 讲一件我无聊到蛋疼做的事情吧 - V2EX 求购一个 notion 免费 pro 账户 - V2EX 现在还在加班 - V2EX 加拿大人多有钱? - V2EX 厉害了,全网 DISS WYF - V2EX 用户群很重要 - V2EX 学习 v2ex - V2EX V 站有画师么,想画个 P5 风格的头像做头像 - V2EX 中二病等于自信吗? - V2EX
小白请问微软为什么偏向于使用 wchar_t 版的 unicode - V2EX
doraos · 2019-01-21 · via 中二病

这是一个创建于 2702 天前的主题,其中的信息可能已经有所发展或是发生改变。

不是有分 UTF-8 版和 UTF-16 版的 unicode 么, wchar_t 说明微软的 API 偏向于使用 UTF-16 版的 unicode,为什么不用 UTF-8 版的字符串,还有 UTF-16 不是有可能出现两个 wchar_t 组成的字符么,那 windows 底层又是怎样定位坐标,对称,快速统计字数的. 如果不能解决单字符占用大小不统一问题,那么用 wchar_t 又相比使用 char 有什么优势呢

wevsty

1

wevsty      2019 年 1 月 21 日   ❤️ 2

这个问题要分几段来解释。
首先明确 UTF-8,UTF-16,UTF-32 都只是 Unicode 的一种实现方式。

UTF-8 发布于 1993 年 1 月,然在 1992 年发布的 Windows 3.1 就已经开始支持中文。
随后的 Windows 9X 系列对于各种语言延续了 ANSI 代码页+本地编码的方法,由于有海量的应用需要兼容,不抛弃历史包袱是没办法魔改了。
到 NT 内核的时代,Windows 2000 内核当时选用的是 UCS-2 编码,在当年 UCS-2 本身是可以保证 2 个字节表示'所有字符'的。NT 内核一直沿用下来(不管是大补还是小补) UCS-2 显然不能满足需求,那么与 UCS-2 完全兼容的 UTF-16 就是首选,毕竟可以保证以前的代码完全兼容,还能满足需求。

最后类型的问题:
wchar_t 这个类型只代表是占 2 个字节的一个数据类型(早期的编译器中甚至直接定义为 unsigned short int ),这个类型本身和编码无关。char 也是一样,依然跟编码无关。
使用 wchar_t 表示采用 UTF-16 编码的字符只是一个约定俗成的东西,如果你乐意你也可以用 wchar_t 来保存 ASCII 字符之类的。

wevsty

2

wevsty      2019 年 1 月 21 日   ❤️ 1

补充一下:
Windows 在很多年以来一直不支持 UTF-8 作为 Windows 的代码页存在,所以实际上要想在 Windows 下面同时支持多国语言使用 UTF-16 几乎是唯一的选择。一直到 Windows 10 1803 (大概时间)才加入了 UTF-8 代码页,但是由此带来的巨大兼容性问题依然十分蛋疼。

另外对于 CPP 来说,从 C++17 标准开始终于增加了几个跟字符编码有关的类型( char16_t,char32_t )

mcdull619

5

mcdull619      2019 年 1 月 21 日   ❤️ 1

都好专业 , 膜拜大神 .

thedrwu

6

thedrwu      2019 年 1 月 21 日 via Android   ❤️ 1

用了 utf8 就不能兼容别的 ansi 扩展,已有的软件不能兼容,于是给每个 api 打了个 W 小尾巴。

然而真正 Unicode 之后,ucs2 不够用就有点尴尬了,导致一些程序不能正确处理 utf16。

hhhsuan

7

hhhsuan      2019 年 1 月 21 日   ❤️ 1

windows 历史包袱太重了,微软应该下决心砍掉重连。

wevsty

8

wevsty      2019 年 1 月 21 日   ❤️ 2

@ysc3839
忘记了,因为存在感实在太低。
UTF-8 代码页无法作为系统的默认代码页,系统的大多数 API 也不支持,这一点直到 Win10 才去改是十分确定的。在此之前 UTF-8 编码的字符串如果要跟系统交互,还是得转换成 UTF-16 或者本地编码去使用的。
查了一下 wikipedia
https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows
Microsoft Windows has a code page designated for UTF-8, code page 65001. Prior to Windows 10 insider build 17035 (November 2017),[7] it was impossible to set the locale code page to 65001, leaving this code page only available for:

Explicit conversion functions such as MultiByteToWideChar
The Win32 console command chcp 65001 to translate stdin/out between UTF-8 and UTF-16.

char16_t 和 char32_t 确实是 C++11 就加到标准了,这个是我记错了。

ysc3839

9

ysc3839      2019 年 1 月 21 日 via Android   ❤️ 1

@wevsty 即使作为系统活动代码页,系统内部还是会 decode 成 UTF-16 再进行处理的。