【android】 中文URL资源找不到的问题

在博客园安卓客户端时,遇到过中文资源找不到的问题

背景:在使用PICASSO的时候,遇到过中文路径加载失败。比如

http://images.cnitblog.com/news_topic/携程.jpg

picasso就加载失败

我们需要用一个方法把中文字符转换为base64格式,试过安卓原生的方法,效果不理想

我们期望的结果是这样的

http://images.cnitblog.com/news_topic/%E6%90%BA%E7%A8%8B.jpg

 

简单讲,就是只转换中文,为了性能,如果路径不包含中文字符串,则提前返回

因此有了下面的函数,使用时直接把url都用该方法装饰一遍,中文路径问题就轻松愉快的解决了。

 private static final String HEX_STRING = "0123456789ABCDEF";



/**

     * 把中文字符转换为带百分号的浏览器编码

     *

     * @param word

     * @return

     */

    public static String toBrowserCode(String word) {

        byte[] bytes = word.getBytes();



        //不包含中文,不做处理

        if (bytes.length == word.length())

            return word;



        StringBuilder browserUrl = new StringBuilder();

        String tempStr = "";



        for (int i = 0; i < word.length(); i++) {

            char currentChar = word.charAt(i);



            //不需要处理

            if ((int) currentChar <= 256) {



                if (tempStr.length() > 0) {

                    byte[] cBytes = tempStr.getBytes();



                    for (int j = 0; j < cBytes.length; j++) {

                        browserUrl.append('%');

                        browserUrl.append(HEX_STRING.charAt((cBytes[j] & 0xf0) >> 4));

                        browserUrl.append(HEX_STRING.charAt((cBytes[j] & 0x0f) >> 0));

                    }

                    tempStr = "";

                }



                browserUrl.append(currentChar);

            } else {

                //把要处理的字符,添加到队列中

                tempStr += currentChar;

            }

        }

        return browserUrl.toString();

    }

 

你可能感兴趣的:(android)