我很难用我母语中的一些变音符替换我文件中的某些字符;如:
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();
}
你能指出我可以解决这个问题的正确方向吗?谢谢。
答案 0 :(得分:0)
您使用的是哪种系统?
您处理的文件似乎可以用UTF8编码,但≤字符不在您使用的语言环境的基础代码集中。
尝试运行命令区域设置以查看您正在使用的区域设置。如果LC_CTYPE条目没有像UTF-8那样结束,您可以尝试以下命令: 区域设置-a 获取可用的语言环境列表,并使用UTF-8代码集查找适合您的语言和位置的内容。区域设置名称没有标准化,但常见的惯例是为您的语言,下划线,2个字母的国家/地区代码,句点和代码集标识符提供2个字母的代码。我大部分时间使用的语言环境是OS X上的en_US.UTF-8(英语,美国,UTF-8),上述命令在此语言环境中无错误地工作。
您可以使用环境变量LANG和LC_ *来设置您运行的标准实用程序的区域设置。好的应用程序将设置它们用于由环境变量控制的语言环境。如果您使用的应用程序不会根据用户请求设置其区域设置,则问题将在C或POSIX区域设置中运行。