我创建了一个分析url的配置单元udf。url包含查询参数。但是,当我在udf中解析输入时,像“=”和“&”这样的字符被转换成乱码。
起初,我是依靠字符串的 toString()
方法转换配置单元 Text
到java字符串。用这种方法将上述字符转换成乱码。然后我试着用 new String(str, StandardCharsets.UTF_8)
转换Hive Text
到java String
. 一开始是这样的。然后,它也开始产生胡言乱语。
我的方法如下所示。有没有关于我做得不对的想法?
public Text evaluate(final Text requestInput, final Text referrerInput) {
if (requestInput == null || referrerInput == null)
return null;
final String request = new String(requestInput.getBytes(), StandardCharsets.UTF_8); // converts '=' and '&' in URL strings to gibberish
final String referrer = new String(referrerInput.getBytes(), StandardCharsets.UTF_8); // converts '=' and '&' in URL strings to gibberish
}
在配置单元中运行hql时:
SELECT get_json_object(json, '$.base.request_url') FROM events
我明白了: GET /api/get_info?id=1465473313746 HTTP/1.1
在我的自定义项中 toString()
方法(无附加处理)生成以下输出: GET /api/get_info?id\u003d1465473313746 HTTP/1.1
1条答案
按热度按时间yzxexxkh1#
我知道
=
以及&
正在转换为它们的unicode等价物。我还不清楚为什么会这样。使用apache commons stringescapeutils实用程序,问题变得更简单:解决了这个问题。