首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重新解释特殊字符的“源代码”

如何重新解释特殊字符的“源代码”
EN

Stack Overflow用户
提问于 2013-06-04 09:25:23
回答 1查看 180关注 0票数 0

我正在编写一个程序(c++,Windows),它使用Raptor librairies解析一个rdf-xml文件(UTF-8编码)。一切都很好,除非解析器找到一个包含特殊字符的文字值(例如'°‘2’‘等)。在这些情况下,解析器返回一个非解释字符串。例如,如果解析器找到文字值:

bla型bla

它将返回一个char选项卡,其中包含:

"bla\u00B5bla“

(引号不是错误,返回的字符串是由‘“代替的)。

我说这个字符串是没有解释的,因为如果我在代码中直接写它,我就会得到预期的结果:

代码语言:javascript
复制
std::string test("bla\u00B5bla"); printf(test.c_str());

产出:

bla型bla

如果我想重现Raptor解析器返回的字符串,我应该这样做:

代码语言:javascript
复制
std::string test("\"bla\\u00B5bla\""); printf(test.c_str());

产出:

"bla\u00B5bla“

那么,我的问题是:如何重新解释字符串中的特殊字符?我做了一些研究,但找不到任何答案。任何帮助都是非常有用和感激的,谢谢。

EDIT1 :这里有一些简单的代码,显示了如何得到‘非解释的’字符串:

代码语言:javascript
复制
void triple_handler(void* user_data, raptor_statement* triple) {
    if (triple->object->type == RAPTOR_TERM_TYPE_LITERAL){
        printf((char*) raptor_term_to_string(triple->object));
    }
}

输出(假设文件中的原始文字值是:bla):

"bla\u00B5bla“

我的目标只是从其中恢复原来正确的字符串。

EN

回答 1

Stack Overflow用户

发布于 2013-06-04 09:44:03

如果没有其他方法,比如要求库输出Unicode字符串,或者根据当前字符集翻译Unicode字符等等。

或者您可以这样做(只是伪代码,可能是错的,只是给您一些提示,您可以将字符串转换为wstring您自己的):

代码语言:javascript
复制
wstring foo(string in_src)
{
    wstring out = L"";

    for (auto i = in_src.begin(), e = in_src.end(); i != e;)
    {
        if (*i != '\\')
        {
            out += (wchar_t)*i;

            ++i;
        }
        else
        {
            if (e - i > 1 && *(i + 1) == '\\')
            {
                out += L'\\';

                i += 2;
            }
            else if (e - i > 4)
            {
                wchar_t c;

                if (convert_next_4_chars_as_hex_number_by_whatever_means(i + 1, c))
                {
                    out += c;

                    i += 5;
                }
                else
                {
                    throw some_error;
                }
            }
            else
            {
                throw some_error;
            }
        }
    }

    return out;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16914181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档