gpt4 book ai didi

c++ - 如何打印从 C++ 文本文件中获取的非英文字符?

转载 作者:行者123 更新时间:2023-11-30 03:27:48 28 4
gpt4 key购买 nike

我正在尝试编写一个简单的 C++ 程序。


目标:打开一个现有的文本文件,获取名字和姓氏并将它们保存到名字和姓氏字符串中。打印姓名和姓氏并跳转到下一行。重复直到文件结束。

我有两个问题

我正在使用最新更新的 windows 8.1 和 visual studio 2017。

主要代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "stdafx.h"
#include <iostream>
using namespace std;


int main() {
FILE *fPtr;



if ((fPtr = fopen("newStudentsList.txt", "r")) == NULL) {
cout << "File could not be opened.\n";
system("pause");
}


else {
char *name = new char[100];
char *surname = new char[100];

rewind(fPtr);

while (!feof(fPtr)) {

fscanf(fPtr, "%s\t%s\n", name, surname);
cout << name << " " << surname << endl;
}

system("pause");
}
return 0;
}

在输出中,我无法正确看到土耳其语字符。这是我的第一个问题。


我的第二个问题是我不能正确地取名字和姓氏,因为在文本文件中它们不是用相同的制表符或空格书写的,有些人有一个名字有些人有两个名字。


所有文件都是here


如何打印非英文字符?


如何正确取名字和姓氏?

最佳答案

首先,不要在C++程序中使用C函数。 C++ 具有不同的特性、不同的抽象和不同的库。使用 C 构造会阻止您使用它们。

C++ 使用 streams通过网络等读取/写入文件、内存和字符串缓冲区。它有大量算法需要流和/或迭代器作为输入。

它还有处理单字节 (std::string)、多字节 (std::wstring)、UTF16 (std::u16string) 和 UTF32 (std::u32string) 库的内置字符串类型.您可以指定这样的 string literals在你的代码中。它甚至有一种类型推断形式 auto关键词。

C++ 仍然没有 UTF8 的类型。程序员应将 UTF8 字符串和文件视为单字节数据,并使用 charstd::string 来存储它们。这些值应根据需要转换为其他代码页或 Unicode 类型。

这意味着您无需执行任何操作即可将 UTF8 文件的内容显示到控制台。代码取自 Input/Output with files教程:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
string line;
ifstream myfile ("newStudentsList.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
cout << line << '\n';
}
myfile.close();
}

else cout << "Unable to open file";

return 0;
}

默认情况下,控制台使用系统区域设置的代码页。您可以通过键入以下内容将其更改为 UTF8 代码页:

chcp 65001

在运行您的应用程序之前。 UTF8 字符串应该正确显示假设控制台字体包含正确的字符

更新

可以指定 UTF8 literals 但存储仍然是 char,例如:

const char* str1 = u8"Hello World";  
const char* str2 = u8"\U0001F607 is O:-)";
const char* s3 = u8"😇 = \U0001F607 is O:-)";

auto str1 = u8"Hello World";  
auto str2 = u8"\U0001F607 is O:-)";

关于c++ - 如何打印从 C++ 文本文件中获取的非英文字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47052373/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com