encoding - 为什么有些字符会变成 ? 而其他人在编码到代码页时会变成 ☐ (␇)?
问题描述
简洁版本
映射器有时使用背后的原因是什么?其他时候使用 ☐?
Unicode: €‚„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ
In 850: ?'".┼╬^%S<OZ''""☐--~Ts>ozY
^\_____________/^\_______/
| | | |
| best fit | best fit
| |
replacement replacement
长版
我正在将一些文本编码到代码页 850,虽然用户使用的许多字符都完美地存在于 850 代码页中,但有些字符并不完全匹配。相反,映射器(例如 .NET System.Text.Encoding 或 Winapi WideStringToMultiByte)提供了最佳匹配:
| Character | In code-page 850 |
|-----------|------------------|
| | |
| | |
| ‚ U+201A | ' |
| | |
| „ U+201E | " |
| … U+2026 | . |
| † U+2020 | ┼ |
| ‡ U+2021 | ╬ |
| ˆ U+02C6 | ^ |
| ‰ U+2030 | % |
| Š U+0160 | S |
| ‹ U+2039 | < |
| Œ U+0152 | O |
| | |
| Ž U+017D | Z |
| | |
| | |
| ‘ U+2018 | ' |
| ’ U+2019 | ' |
| “ U+201C | " |
| ” U+201D | " |
| | |
| – U+2013 | - |
| — U+2014 | - |
| ˜ U+02DC | ~ |
| ™ U+2122 | T |
| š U+0161 | s |
| › U+203A | > |
| œ U+0153 | o |
| | |
| ž U+017E | z |
| Ÿ U+0178 | Y |
这些最佳匹配是正确的、良好的、适当的、想要的并且完全合理:。
但有些字符没有映射:
| Character | In code-page 850 |
|-----------|------------------|
| € U+20AC | ? 0x37 | literally 0x37 (i.e. U+003F Question Mark)
| • U+2022 | ☐ 0x07 | literally 0x07 (i.e. U+0007 BELL)
这是怎么回事?
为什么有时是问号,有时是␇?
注意:这种缺乏映射对我来说并不是非常重要。如果联邦政府不支持合理的编码,那么他们就会拿走我给他们的垃圾。所以我很好。
当我尝试调用MultiByteToWideChar
以反转映射时,稍后会出现问题,并且该函数由于无效字符而失败。虽然我可以稍后尝试找出将反向编码回字符的问题;我很好奇编码映射器试图告诉我什么。
额外的乐趣
细心的观察者会理解我为什么选择我做的角色,我做的顺序,以及为什么会有差距。我不想提及它,以免使问题的读者感到困惑。
解决方案
推荐阅读
- azure-ad-b2c - 具有 AAD B2C 的 MSAL 客户端凭据
- php - 在 MySQL/PHP 中插入唯一随机 ID 的最佳方法?
- angular - Angular - 在表格底部显示空值
- c# - 忽略大小写敏感性的数据集合并
- delphi - Delphi 10.3.3 Rio - Dock Form 丢失 Tmenu 项目
- python - 使用两个变量构建一个 for 循环
- python - 网页抓取到数据框
- spring-security - 通过 Spring Security OAuth2 客户端成功匿名身份验证后重定向到特定 URL
- c# - 创建一个 Json Epoch 字符串
- foreach - RxJs 如何在返回父对象的同时映射子对象?