我一直在寻找一种处理波兰语单词的方法。我读到了 utf8、16、32,但是任何从charto 的转换utf都会给我不同的字母。
但是 wchar_t 给出了正确的字母。
这样做可以吗?
例如,如果我只使用 ascii,那么性能呢?它会以任何方式影响应用程序吗?
你混淆了两件不同的事情:
贮存
如何存储构成文本字符串的字节。这会在char(单字节)值的数组中吗?还是会以wchar_t(多字节)值的形式出现?
编码
您的计算机(和您!)需要知道如何处理这些字节中的值。他们的意思是什么?无论存储如何,它们都可以是 ASCII、一些代码页、UTF-8、UTF-16、UTF-32、克林贡语等等。
通常,由于历史原因,我们选择char单字节编码(例如 ASCII)和 UTF-8,以及wchar_tUTF-16(特别是在 Windows 上,它有 16 位wchar_ts 并且通常在其整个 API 中假设这种组合——注意它不准确地将其称为“Unicode”)。
性能并没有真正考虑到它,尽管如果您选择并坚持使用不同编码之间的转换(并使用适合您正在使用的字符串库的存储机制),您将节省时间和精力。有时您的操作系统将帮助确定该选择,但我们无法告诉您它将是什么。
同样,您关于“有效”和“无效”的陈述非常模糊,并且可能是错误的。
如果不知道您的项目的要求、它将在什么样的计算机上运行以及采用什么技术,我们就不能说什么是“好的”。不过,我会做一个巨大的概括:在过去,您可能使用过Mazovia 编码,一种包含波兰字符的更改代码页;如今,您可能希望使可移植性和互换性尽可能容易(因为为什么不呢?!),因此鼓励您wchar_t在 Windows 上坚持使用 UTF-16,而在char其他情况下坚持使用 UTF-8。
(从 C++20 开始,我们还将拥有char8_t,一种专门设计用于表示它存储 UTF-8 编码数据的存储机制;但是,如果有的话,您还需要一段时间才能看到它被广泛使用。你可以在cppreference.com 关于“基本类型”的文章中阅读更多关于 C++ 字符类型的信息)