【问题标题】:C++ - Replace special characters from file with non ascii charactersC++ - 用非ASCII字符替换文件中的特殊字符
【发布时间】:2015-04-10 12:01:44
【问题描述】:

我很难用我的母语中的一些变音符号替换我文件中的一些字符;如:

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();
}

你能指出我可以解决这个问题的正确方向吗?谢谢。

【问题讨论】:

    标签: c++ unicode utf-8


    【解决方案1】:

    你用的是什么系统?

    看起来您正在处理的文件可能以 UTF8 编码,但 ≤ 字符不在您正在使用的语言环境的代码集中。

    尝试运行命令 locale 以查看您使用的语言环境。如果 LC_CTYPE 条目不是以 UTF-8 之类的结尾,您可以尝试以下命令: 语言环境-a 获取可用的语言环境列表,并使用 UTF-8 代码集查找适合您的语言和位置的内容。语言环境名称不是标准化的,但一个常见的约定是为您的语言设置一个 2 个字母的代码、一个下划线、一个 2 个字母的国家代码、一个句点和一个代码集标识符。我大部分时间使用的语言环境是 OS X 上的 en_US.UTF-8(英语、美利坚合众国、UTF-8),并且上述命令在此语言环境中正常工作。

    您可以使用环境变量 LANG 和 LC_* 为您运行的标准实用程序设置区域设置。好的应用程序会将它们使用的语言环境设置为由环境变量控制。如果您使用的应用程序未根据用户请求设置其语言环境,那么它们将在 C 或 POSIX 语言环境中运行时出现问题。

    请点击此链接 http://www.unix.com/unix-for-dummies-questions-and-answers/220029-remove-replace-non-ascii-character-file.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2023-03-12
      • 2012-01-07
      • 2017-11-26
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      相关资源
      最近更新 更多