在Java字符串中编码正斜杠(' \ u002f')

时间:2015-08-25 15:32:28

标签: java string utf-8 character-encoding

我在Java中编译正斜杠字符时遇到问题。我有这个程序来说明发生了什么 -

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.Charset;

import org.apache.commons.io.IOUtils;

public class SlashTester {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        String input = "http:\u002f\u002fgoogle.com";
        System.out.println(input); // Prints "http://google.com"

        String input2 = IOUtils.toString(new FileInputStream("hello.txt"), Charset.forName("UTF-8"));
        System.out.println(input2); //Prints "http:\u002f\u002fgoogle.com"
    }
}

程序从文件" hello.txt"中读取。该文件的内容只是 -

http:\u002f\u002fgoogle.com

请注意,这与字符串'输入'。

相同

有人可以向我解释为什么输出会有差异吗?

3 个答案:

答案 0 :(得分:1)

Java编译器理解\uXXXX语法并翻译这些字符。如果您想要执行此翻译,您需要自己完成此操作。

注意:这甚至不需要在String中,你可以做像

这样的事情

\ u0053 \ u0079 \ u0073 \ u0074 \ u0065 \ u006d \ u002e \ u006f \ u0075 \ u0074 \ u002e \ u0070 \ u0072 \ u0069 \ u006e \ u0074 \ u006c \ u006e \ u0028 \ u0022 \ u0048 \ u0065 \ u006c \ u006c \ u006f \ u0020 \ u0057 \ u006f \ u0072 \ u006c \ u0064 \ u0022 \ u0029 \ u003b

相同
System.out.println("Hello World");

因为编译器会在检查代码之前翻译这些字符。

答案 1 :(得分:1)

您必须将String置于双重反弹以避免此行为,因为:

String input = "http:\\u002f\\u002fgoogle.com";

它会打印给你http:\u002f\u002fgoogle.com。这是因为String特殊字符必须在它们之前使用强制性\进行搜索。

有关详细信息,请参阅:javadocs

我希望它会对你有所帮助!

答案 2 :(得分:0)

对于任何想要将 unicode url 或字符串转换和转义为未转义的人 像我一样

转义字符:

'http\\u00253A\\u00252F\\u00252Fexample.com';

未转义字符:

'http://example.com'

使用这个技巧可以节省你几个小时(from radicant's answer):

decodeURIComponent(JSON.parse('"http\\u00253A\\u00252F\\u00252Fexample.com"'));
> 'http://example.com'