我在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
请注意,这与字符串'输入'。
相同有人可以向我解释为什么输出会有差异吗?
答案 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'