首页 > 解决方案 > 为什么有些字符会变成 ? 而其他人在编码到代码页时会变成 ☐ (␇)?

问题描述

简洁版本

映射器有时使用背后的原因是什么?其他时候使用 ☐?

Unicode:  €‚„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ
In 850:   ?'".┼╬^%S<OZ''""☐--~Ts>ozY
          ^\_____________/^\_______/
          |       |       |    |  
          |    best fit   |  best fit
          |               |
       replacement     replacement

CS小提琴

长版

我正在将一些文本编码到代码页 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以反转映射时,稍后会出现问题,并且该函数由于无效字符而失败。虽然我可以稍后尝试找出将反向编码回字符的问题;我很好奇编码映射器试图告诉我什么。

额外的乐趣

细心的观察者会理解我为什么选择我做的角色,我做的顺序,以及为什么会有差距。我不想提及它,以免使问题的读者感到困惑。

标签: encodingcharacter-encoding

解决方案



推荐阅读