如何将“\u002f”转换为“/”(在c++中)?

如何将“\u002f”转换为“/”(在c++中)?,c++,unicode,encoding,C++,Unicode,Encoding,我必须从共享点获取以下字符串: \u002fsites\u002fblabla\U002F共享文档\u002fkittens.xml 我试图将其转换为: /sites/blabla/Shared Documents/kittens.xml 我在谷歌上搜索了一下,发现它是Unicode编码的,但我找不到任何可以转换它的东西,从技术上讲,我可以编写一个小函数,将所有\u002f转换为/但我认为这样做是不对的 如果有人能解释一下这件事,那将是非常有帮助的 谢谢我不知道C++中是否有现成的函数来做或不做

我必须从共享点获取以下字符串: \u002fsites\u002fblabla\U002F共享文档\u002fkittens.xml

我试图将其转换为: /sites/blabla/Shared Documents/kittens.xml

我在谷歌上搜索了一下,发现它是Unicode编码的,但我找不到任何可以转换它的东西,从技术上讲,我可以编写一个小函数,将所有\u002f转换为/但我认为这样做是不对的

如果有人能解释一下这件事,那将是非常有帮助的


谢谢

我不知道C++中是否有现成的函数来做或不做,但是你可以用这个算法来做:

1-find\使用字符串类中的find函数在第一个字符串中查找字符,将其更改为/ 2-从这一点省略到下一个4,包括u002,依此类推

#include <iostream>
#include <string>
using namespace std;
string process(string str){
    string result="";
    for (int i=0;i<str.size();i++){
        if(str[i]=='\\' ) {
            result.push_back('//');
            i+=5;
        }
        else
            result.push_back(str[i]);
    }
    return result;
}
int main(){
    string path;
    getline(cin,path);
    cout<<process(path)<<endl;
}

<>我不知道C++中是否有现成的函数来做或不做,但是你可以通过这个算法来执行:

1-find\使用字符串类中的find函数在第一个字符串中查找字符,将其更改为/ 2-从这一点省略到下一个4,包括u002,依此类推

#include <iostream>
#include <string>
using namespace std;
string process(string str){
    string result="";
    for (int i=0;i<str.size();i++){
        if(str[i]=='\\' ) {
            result.push_back('//');
            i+=5;
        }
        else
            result.push_back(str[i]);
    }
    return result;
}
int main(){
    string path;
    getline(cin,path);
    cout<<process(path)<<endl;
}
如果字符串是字符串文字,编译器应该 注意翻译;序列号\uxxx 是通用字符名。如果你读的是数据 从外部来源来看,我不知道有任何标准函数 这将改变它;你得自己写。和 一旦您添加了所有的 必要的错误检查。

如果字符串是字符串文字,编译器应该 注意翻译;序列号\uxxx 是通用字符名。如果你读的是数据 从外部来源来看,我不知道有任何标准函数 这将改变它;你得自己写。和 一旦您添加了所有的
必要的错误检查。

我发现一个库解决了我的问题,我想分享解决方案,以防其他人偶然发现这个问题

图书馆叫ICU

使用非常简单:

icu::UnicodeString converter = icu::UnicodeString(in.c_str(),in.length());
icu::UnicodeString newUstring = converter.unescape();
newUstring.toUTF8String(out);

当输入和输出都是字符串时。

我发现一个库解决了我的问题,我想分享解决方案,以防其他人偶然发现这个问题

图书馆叫ICU

使用非常简单:

icu::UnicodeString converter = icu::UnicodeString(in.c_str(),in.length());
icu::UnicodeString newUstring = converter.unescape();
newUstring.toUTF8String(out);

当输入和输出为字符串时。

表示\u002f是“/”的utf16编码-您可以将字符串转换为utf8。@DieterLücking:我猜他实际上得到了\u0 2f 6个字符。转换为UTF8不会改变字符数,您只会得到UTF-8 ASCII格式的\u 0 2 f,在这种情况下,有许多不同的字符串文字格式使用\u转义。你需要找出你得到的是哪一个,并使用合适的解码器,因为它们并不完全相同。例如,如果上述内容是JSON字符串文字的一部分,则使用JSON解码器,但这可能会为C字符串文字产生不正确的输出。@b据我所知,通用字符名格式始终相同:\uxxx或“\uxxxxx”,其中x是十六进制数字。第一种格式用于基本平面中的代码点;第二个是其他人。不同的语言可能会指定不同的转义序列集,但我希望任何支持通用字符名的语言都使用相同的规则。u002f是“/”的utf16编码-您可以将字符串转换为utf8。@DieterLücking:我想他实际上得到了\u 0 2 f 6个字符。转换为UTF8不会改变字符数,您只会得到UTF-8 ASCII格式的\u 0 2 f,在这种情况下,有许多不同的字符串文字格式使用\u转义。你需要找出你得到的是哪一个,并使用合适的解码器,因为它们并不完全相同。例如,如果上述内容是JSON字符串文字的一部分,则使用JSON解码器,但这可能会为C字符串文字产生不正确的输出。@b据我所知,通用字符名格式始终相同:\uxxx或“\uxxxxx”,其中x是十六进制数字。第一种格式用于基本平面中的代码点;第二个是其他人。不同的语言可能会指定不同的转义序列集,但我希望任何支持通用字符名的语言都会使用相同的规则。当然,当任何其他字符作为Unicode转义字符发送时,转义序列会发生可怕的破坏。顺便说一句,您需要删除5个字符u002f。@M在任何情况下都会严重损坏。在编写第一行代码之前,您必须考虑在所有可能的错误情况下应该做什么。我以为我的工具箱中有一些代码可以实现这一点,但我找不到它;我知道我做过一次,处理了所有常见的转义序列,而不仅仅是\u,而且花了相当多的代码行,其中一半以上是处理不应该发生但不可避免会发生的特殊情况。当然,这些情况会像
当任何其他字符作为Unicode转义字符发送时。顺便说一句,您需要删除5个字符u002f。@M在任何情况下都会严重损坏。在编写第一行代码之前,您必须考虑在所有可能的错误情况下应该做什么。我以为我的工具箱中有一些代码可以实现这一点,但我找不到它;我知道我做过一次,处理了所有常见的转义序列,不仅仅是\u,而且花了相当多的代码行,其中一半以上是处理不应该发生但不可避免会发生的特殊情况。我是从外部来源阅读的,在哪里可以找到有关此类函数如何工作的更多信息?@OopsUser C/C++标准定义了所有合法转义序列。根据上下文,您可能会很高兴地认识到通用字符名称,这些字符名称也在几种语言标准中描述,包括C和C++,或者您可能希望一般处理所有转义序列。通用字符名为\uxxx或\uxxxxx,其中x为十六进制数字。您可以将x转换为一个数字值,即Unicode代码点。我正在从外部源读取它,在哪里可以找到有关此类函数如何工作的更多信息?@OopsUser C/C++标准定义了所有合法转义序列。根据上下文,您可能会很高兴地认识到通用字符名称,这些字符名称也在几种语言标准中描述,包括C和C++,或者您可能希望一般处理所有转义序列。通用字符名为\uxxx或\uxxxxx,其中x为十六进制数字。将x转换为数字值,即Unicode代码点。从一个特定问题开始,找到了一个通用解决方案。美好的您从一个特定的问题开始,并找到了一个通用的解决方案。美好的