我已经为这件事挠头好一阵子了,我需要一些帮助。基本上,我希望代码做的是将一系列非ASCII符号读取到一个空的预设数组中,然后打印它们,看看它们是否被读取,而当前没有被读取。记事本显示它们很好,但由于某种原因,C++不能识别它们为有效字符,任何建议,只关于代码和不改变我的电脑内部设置,强烈首选。
char displayCharacters[5] = {};
try {
instream.open("characters.txt");
instream >> displayCharacters;
cout << "Here is the first symbol: " << displayCharacters[4];
}
catch (exception) {
cout << "Something went wrong with the file handling.";
}
是的,我已经正确地设置了instreams,cout是从iostream的导入中使用的,并且使用名称空间std。以下是该文件包含的内容:
█
▀
▄
▓
编辑:文件是UTF-8,如果你需要知道的话。
您需要先对UTF-8进行解码,然后才能对其进行索引。阅读更多的细节比我期望写…
C++流不是编码感知的--它只是一个字节流。例如,这段转储整个UTF-8字符串的代码工作得很好:
#include <iostream>
#include <sstream>
#include <string>
int main() {
// Simulate your `instream` using an `std::stringstream`
std::stringstream instream;
// Load the simulated `instream` using a UTF-8 string literal [1]
instream << u8"█\n \n▀\n▄\n▓\n";
// Print entire `instream`
std::cout << instream.rdbuf();
}
[1]:https://en.cppreference.com/W/cpp/language/string_literal
您的问题来自UTF-8编码本身。UTF-8是一种多字节编码。有些字符(特别是ASCII字符)被编码为单个字节。例如,字母a
被编码为值97(0x61
,十六进制)。
让我们来看看你要打印的五个字符: