我有一个这样的字符串:
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!