因此,我一直在尝试对字符串和wstrings进行一些研究,因为我需要了解它们在我正在创建的程序中如何工作,因此我还研究了ASCII和unicode以及UTF-8和UTF-16。
我相信我对它们如何工作的概念有很好的了解,但是我仍然遇到的问题是它们如何实际存储在“char”,“string”,“wchar_t”和“wstring”中。
所以我的问题如下:
char和wchar_t使用哪个字符集和编码?这些类型是否仅限于仅使用这些字符集/编码? 如果它们不限于这些字符集/编码,那么如何确定特定char或wchar_t使用哪种字符集/编码?是自动决定要编译的还是我们必须明确告诉它使用什么? 据我了解,使用集合中的前128个代码点时,UTF-8使用1个字节,但是使用128点及更高版本的代码点时,可以使用1个字节以上。如果是这样,如何存储?例如,如果仅使用1个字节,是否仅以与ASCII相同的方式存储?类型(char或wchar_t或其他类型)如何知道它正在使用多少字节? 最后,如果我的理解是正确的,我会明白为什么UTF-8和UTF-16不兼容。需要wstring的地方不能使用字符串。但是,在需要wstring的程序中,最好是编写一个从字符串到wstring的转换函数,然后在需要wstring来使我的代码完全基于字符串的情况下使用它,或者仅在需要时使用wstring来使用?
谢谢,让我知道我的问题是否措辞不正确或使用错误的术语,因为我正尽力解决这一问题。
我在C++中工作 他们使用所需的任何字符集和编码。这些类型并不意味着特定的字符集或编码。它们甚至不暗示字符-您可以愉快地对它们进行数学问题。不过不要这样做,这很奇怪。 您如何输出文本?如果是控制台,则控制台决定与每个值关联的字符。如果是某些图形工具箱,则由该工具箱决定。控制台和工具箱往往符合标准,因此,如今它们很有可能会使用unicode。在较旧的系统上,可能会发生任何事情。 UTF8与ASCII的值相同,范围为0-127。除此之外,它变得更加复杂。这在这里很好地解释了:https://en.wikipedia.org/wiki/UTF-8#Description wstring是由wchar_t组成的字符串,但是遗憾的是,wchar_t在不同平台上的实现方式不同。例如,在Visual Studio上,它是16位(可以用来存储UTF16),但是在GCC上,它是32位(因此可以用来直接存储unicode码点)。如果您希望代码可移植,则需要意识到这一点。我个人选择只将字符串存储在UTF8中,并仅在需要时进行转换。