【发布时间】:2014-08-21 04:43:36
【问题描述】:
我阅读了很多关于 Unicode、ASCII、代码页、所有历史、UTF-8、UTF-16 (UCS-2)、UTF-32 (UCS-4) 的发明以及使用它们的人等等,但我仍然有一些问题,我几乎找不到答案,但我无法找到答案,希望您能帮助我。
1 - Unicode 是编码字符的标准,它们为每个字符指定一个代码点。像 U+0000 (示例)。想象一下,我有一个包含这些代码点 (\u0000) 的文件,我将在应用程序的哪个点使用它?
这可能是一个愚蠢的问题,但我真的不知道我将在应用程序的哪一点使用它。
我正在创建一个应用程序,它可以使用转义符\u 读取具有这些代码点的文件,并且我知道我可以读取、解码它,但现在是下一个问题。
2 - 我需要将其转换为哪个字符集(代码页)?我看到一些 C++ 库,它们使用名称 utf8_to_unicode 或 utf8-to-utf16,也只有 utf8_decode,这让我感到困惑。
我不知道会不会出现这样的答案,但是有人可能会说:你需要把它转换成你要使用的代码页,但是如果我的应用程序需要国际化呢?
3 - 我想知道,在 C++ 中,如果我尝试在终端上显示非 ASCII 字符,我会得到一些令人困惑的单词。问题是:字体是什么让要显示的字符?
#include <iostream>
int main()
{
std::cout << "ö" << std::endl;
return 0;
}
输出(Windows):
├Â
4 - 编码进入该过程的哪个部分?它编码,获取代码点并尝试在字体上找到相等的单词?
5 = WebKit 是用于在 Web 浏览器中呈现网页的引擎,如果您将字符集指定为 UTF-8,它可以很好地处理所有字符,但如果我指定另一个字符集,它不会,不会不管我使用什么字体,会发生什么?
<html>
<head>
<meta charset="iso-8859-1">
</head>
<body>
<p>ö</p>
</body>
</html>
输出:
ö
使用:
<meta charset="utf-8">
6 - 想象一下,现在我读取了文件,对它进行了编码,我拥有了所有的代码点,我需要再次保存文件。我需要将其编码保存(\u0000)还是需要先解码以再次转换为字符然后保存?
7 - 为什么“unicode”这个词有点重载,有时被理解为 utf-16? (source)
暂时就这些了。提前致谢。
【问题讨论】:
-
characters are ambiguous: 它通常用于代码单元,但正确地指代代码点甚至字素。在这里使用一个不那么模棱两可的术语。
-
看起来你想要一个完整的 Unicode 入门。你读过维基百科页面吗?
-
是的,我做到了,我有这些问题。
-
相关阅读(如果不是全部,也应该回答第7点):utf8everywhere.org
-
谢谢@Deduplicator,我要读了。
标签: c++ unicode utf-8 utf-16 utf-32