如何使用C ++解除C转义的Unicode字符串?

时间:2012-02-22 09:35:47

标签: c++ boost unicode stl

  

可能重复:
  How to read file which contains \uxxxx in vc++

我有一个这样的字符串:

string _str1("\\u6e05\\u534e\\u5927\\u5b66");

那些_str1来自HTTP GET请求;它们由C转义的Unicode字符组成。我希望能够忽略它们,导致实际的字符代码存储在字符串中,就像我写的一样,

string _str2("\u6e05\u534e\u5927\u5b66");

...并允许编译器解析它们。所以期望的结果是包含清华大学的字符串。

(请注意,原始问题存在一些混淆 - 我不希望像u6e05u534eu5927u5b66这样的结果作为最终结果!)

-----edited--23/Feb----

在我的http响应标题中:

Content-Disposition: attachment; filename="\u6e05\u534e\u5927\u5b66.doc"

此处的文件名由:

生成
send_file c.candy.path, :filename => c.original_name.force_encoding('utf-8').to_json, :stream => true, :buffer_size => 4096

来自我的rails服务器。

在我的cpp客户端中,我得到了与上面显示的_str1相同的字符串。

My solution

我选择JSON Spirit来解析json字符串。

如果你有这样的字符串:

Content-Disposition: attachment; filename="\u6e05\u534e\u5927\u5b66.doc"

说,它是_str1。

wstring _str2 = string2wstring(_str1);
wValue _value;
read_string(_str2, _value);
const wObject& _object = _value.get_obj();
for( wObject::size_type i = 0; i != _object.size(); ++i )
{
    const wPair& pair = _object[i];
    const wstring& _p_name  = pair.name_;
    const wValue&  _p_value = pair.value_;

    if( L"original_name" == _p_name )
    {
        wstring _wtemp = _p_value.get_str();
    string _desired_string = wstring2string(_wtemp);
    }
    ... ...
    else
    {
        assert( false );
    }
} // for

Json spirit目前只解析通常包含“\ u”的wstring。

感谢@bobince和@ Shog9!

0 个答案:

没有答案