C++ - 用非 ascii 字符替换文件中的特殊字符
C++ - Replace special characters from file with non ascii characters
我很难用母语中的变音符号替换文件中的某些字符;如:
character_to_replace replacement
º ș
ª Ș
þ ț
Þ Ț
我找到了 character_to_replace 的 Unicode,但由于某些原因,该文件无法保存到预期的输出。我发现这与 UTF-8 和 unicode 转换有关。但是,我设法打印出字符,但仅当我尝试写入文件时才打印到控制台,但它不起作用。这是我的代码:
void replace(string &source, string to_replace, string replacement)
{
int found = 0;
string auxiliar;
auxiliar = source;
while (found != string::npos)
{
found = auxiliar.find(to_replace);
if (found != -1)
{
source.replace(found, 1, replacement);
auxiliar = auxiliar.substr(found + to_replace.size());
}
}
}
int main()
{
cout << endl;
string line;
ifstream file;
ofstream send_line;
send_line.open("out.txt");
file.open("in.txt");
while (!file.eof())
{
getline(file, line);
replace(line, "\u00b0", "\u0219");
replace(line, "\u00aa", "\u0218");
replace(line, "\u00fe", "\u021b");
replace(line, "\u00de", "\u021a");
send_line << line << "\n";
}
file.close();
send_line.close();
}
你能指出我可以解决这个问题的正确方向吗?谢谢。
您使用的是什么系统?
看起来您正在处理的文件可能是用 UTF8 编码的,但 ≤ 字符不在您正在使用的语言环境下的代码集中。
尝试运行使用命令语言环境来查看您使用的语言环境。如果 LC_CTYPE 条目不是以 UTF-8 之类的结尾,您可以尝试以下命令:
语言环境-a
获取可用语言环境列表并使用 UTF-8 代码集查找适合您的语言和位置的内容。语言环境名称不是标准化的,但常见的约定是您的语言有一个 2 个字母的代码、一个下划线、一个 2 个字母的国家/地区代码、一个句点和一个代码集标识符。我大部分时间使用的语言环境是 OS X 上的 en_US.UTF-8(英语,美利坚合众国,UTF-8),并且上述命令在此语言环境中正常运行。
您可以使用环境变量 LANG 和 LC_* 为您 运行 的标准实用程序设置语言环境。好的应用程序会将它们使用的区域设置设置为由环境变量控制。如果您使用的应用程序未根据用户请求设置其区域设置,则它们将在 C 或 POSIX 区域设置中出现 运行。
我很难用母语中的变音符号替换文件中的某些字符;如:
character_to_replace replacement
º ș
ª Ș
þ ț
Þ Ț
我找到了 character_to_replace 的 Unicode,但由于某些原因,该文件无法保存到预期的输出。我发现这与 UTF-8 和 unicode 转换有关。但是,我设法打印出字符,但仅当我尝试写入文件时才打印到控制台,但它不起作用。这是我的代码:
void replace(string &source, string to_replace, string replacement)
{
int found = 0;
string auxiliar;
auxiliar = source;
while (found != string::npos)
{
found = auxiliar.find(to_replace);
if (found != -1)
{
source.replace(found, 1, replacement);
auxiliar = auxiliar.substr(found + to_replace.size());
}
}
}
int main()
{
cout << endl;
string line;
ifstream file;
ofstream send_line;
send_line.open("out.txt");
file.open("in.txt");
while (!file.eof())
{
getline(file, line);
replace(line, "\u00b0", "\u0219");
replace(line, "\u00aa", "\u0218");
replace(line, "\u00fe", "\u021b");
replace(line, "\u00de", "\u021a");
send_line << line << "\n";
}
file.close();
send_line.close();
}
你能指出我可以解决这个问题的正确方向吗?谢谢。
您使用的是什么系统?
看起来您正在处理的文件可能是用 UTF8 编码的,但 ≤ 字符不在您正在使用的语言环境下的代码集中。
尝试运行使用命令语言环境来查看您使用的语言环境。如果 LC_CTYPE 条目不是以 UTF-8 之类的结尾,您可以尝试以下命令: 语言环境-a 获取可用语言环境列表并使用 UTF-8 代码集查找适合您的语言和位置的内容。语言环境名称不是标准化的,但常见的约定是您的语言有一个 2 个字母的代码、一个下划线、一个 2 个字母的国家/地区代码、一个句点和一个代码集标识符。我大部分时间使用的语言环境是 OS X 上的 en_US.UTF-8(英语,美利坚合众国,UTF-8),并且上述命令在此语言环境中正常运行。
您可以使用环境变量 LANG 和 LC_* 为您 运行 的标准实用程序设置语言环境。好的应用程序会将它们使用的区域设置设置为由环境变量控制。如果您使用的应用程序未根据用户请求设置其区域设置,则它们将在 C 或 POSIX 区域设置中出现 运行。