Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用TwitterSDK for Android发布推文中的奇怪字符_Android_Twitter_Character Encoding_Share_Tweets - Fatal编程技术网

使用TwitterSDK for Android发布推文中的奇怪字符

使用TwitterSDK for Android发布推文中的奇怪字符,android,twitter,character-encoding,share,tweets,Android,Twitter,Character Encoding,Share,Tweets,我已经使用了“getBytes(“UTF-8”);”,但仍然没有显示重音,有什么建议吗?在logcat中没有显示任何错误:( tweet=“重新处理拉莫斯·奇查里托”:塞尔吉奥·拉莫斯、皇家马德里国防军、迪乔·哈维尔·埃尔南德斯和朱加多的重要人物和重新处理……” 返回:reconcose%20Ramos%20al%20%27Chicharito%27%3A%20ergio%20Ramos%2C%20defensa%20del%20Real%20Madrid%2C%20dijo%20que%20J

我已经使用了“getBytes(“UTF-8”);”,但仍然没有显示重音,有什么建议吗?在logcat中没有显示任何错误:(

tweet=
“重新处理拉莫斯·奇查里托”:塞尔吉奥·拉莫斯、皇家马德里国防军、迪乔·哈维尔·埃尔南德斯和朱加多的重要人物和重新处理……”

返回:
reconcose%20Ramos%20al%20%27Chicharito%27%3A%20ergio%20Ramos%2C%20defensa%20del%20Real%20Madrid%2C%20dijo%20que%20Javier%20Hern%E1ndez%20es%20un%20jugador%20important%20y%20reconco…

public String createRequestSignature(String signatureBase, String consumerSecret, String tokenSecret) 
        throws Exception {
        try {
            String keyString    = URIUtil.encode(consumerSecret) + '&' + URIUtil.encode(tokenSecret);
            Debug.i("key " + keyString);
            byte[] keyBytes     = keyString.getBytes("UTF-8");
            SecretKey key       = new SecretKeySpec(keyBytes, MAC_NAME);
            Mac mac             = Mac.getInstance(MAC_NAME);
            mac.init(key);
            byte[] text         = signatureBase.getBytes("UTF-8");
            return Base64.encodeBytes(mac.doFinal(text)).trim();
        } catch (GeneralSecurityException e) {
            throw e;
        } catch (UnsupportedEncodingException e) {
            throw e;
        }
    }
签名库:
POST&https%3A%2F%2Fapi.twitter.com%2F1.1%2fstatus%2update.json&oauth_消费者密钥%3DqW5IFxldNY0wSPEw8vTw9Q%26oauth_nonce%3da7254620cc1a2cb59464a315f27 ec464b7909a56%26oauth_签名方法%3DHMAC-SHA1%26oauth_时间戳%3D1409680538%26oauth_令牌%2649274;-0kv9;%3d927564-0kvxusukuwkvwkvwkv719u版本%2u6状态%3重新处理%2520Ramos%2520al%2520%2527Chicharito%2527%253A%2520Sergio%2520Ramos%252C%2520defensa%2520del%2520Real%2520Adrid%252C%2520dijo%2520que%2520Javier%2520Hern%25E1ndez%2520es%2520un%2520jugador%2520Important%2520y%2520Recoo…

public String createRequestSignature(String signatureBase, String consumerSecret, String tokenSecret) 
        throws Exception {
        try {
            String keyString    = URIUtil.encode(consumerSecret) + '&' + URIUtil.encode(tokenSecret);
            Debug.i("key " + keyString);
            byte[] keyBytes     = keyString.getBytes("UTF-8");
            SecretKey key       = new SecretKeySpec(keyBytes, MAC_NAME);
            Mac mac             = Mac.getInstance(MAC_NAME);
            mac.init(key);
            byte[] text         = signatureBase.getBytes("UTF-8");
            return Base64.encodeBytes(mac.doFinal(text)).trim();
        } catch (GeneralSecurityException e) {
            throw e;
        } catch (UnsupportedEncodingException e) {
            throw e;
        }
    }
在时间轴上看:拉莫斯的“奇查里托”:塞尔吉奥·拉莫斯、皇家马德里的德菲萨、哈维尔·赫恩的《复兴》?《复兴》是一部重要的复兴之作

public String getQueryString() {
        if (mParams.size() == 0) {
            return "";
        }
        StringBuffer querySb = new StringBuffer();
        int size = mParams.size();
        int i = 0;
        for (String key : mParams.keySet()) {
            HttpValues values = mParams.get(key);
            if (values != null) {
                if (!values.isEmpty()) {
                    TreeSet<String> vals = values.getAll();
                    Iterator<String> iterator = vals.iterator();
                    while (iterator.hasNext()) { 
                        querySb.append(key + "=" + URIUtil.encode((String) iterator.next()));
                        if (iterator.hasNext()) {
                            querySb.append("&");
                        }
                    }
                } else {
                    querySb.append(key + "=");
                }
            } else {
                querySb.append(key + "=");
            }
            if (i != size-1) {
                querySb.append("&");
            }
            i++;
        }

        return querySb.toString();
    }

public static String encode(String input) {
        StringBuilder resultStr = new StringBuilder();
        for (char ch : input.toCharArray()) {
            if (isUnSafe(ch)) {
                resultStr.append('%');
                resultStr.append(toHex(ch / 16));
                resultStr.append(toHex(ch % 16));
            } else {
                resultStr.append(ch);
            }
        }
        return resultStr.toString();
    }

    private static char toHex(int ch) {
        return (char) (ch < 10 ? '0' + ch : 'A' + ch - 10);
    }

    private static boolean isUnSafe(char ch) {
        if (ch > 128 || ch < 0)
            return true;
        return " %*$&+,/:;=?@<>#%'\n".indexOf(ch) >= 0;
    }
公共字符串getQueryString(){
如果(mParams.size()==0){
返回“”;
}
StringBuffer querySb=新的StringBuffer();
int size=mParams.size();
int i=0;
for(字符串键:mParams.keySet()){
HttpValues=mParams.get(键);
如果(值!=null){
如果(!values.isEmpty()){
TreeSet vals=values.getAll();
迭代器迭代器=vals.Iterator();
while(iterator.hasNext()){
append(key+“=”+URIUtil.encode((String)iterator.next());
if(iterator.hasNext()){
查询b.追加(“&”);
}
}
}否则{
querySb.append(键+“=”);
}
}否则{
querySb.append(键+“=”);
}
如果(i!=尺寸-1){
查询b.追加(“&”);
}
i++;
}
返回querySb.toString();
}
公共静态字符串编码(字符串输入){
StringBuilder resultStr=新建StringBuilder();
for(char ch:input.toCharArray()){
如果(不安全(ch)){
结果tr.append('%');
结果tr.append(toHex(ch/16));
结果tr.append(toHex(ch%16));
}否则{
结果追加(ch);
}
}
返回resultStr.toString();
}
私有静态字符到十六进制(int-ch){
返回(字符)(ch<10?'0'+ch:A'+ch-10);
}
私有静态布尔值不安全(char ch){
如果(ch>128 | | ch<0)
返回true;
返回“%*$&+,/:;=?@#%'\n”.indexOf(ch)>=0;
}

您已经显示了创建请求签名的代码…您还没有显示如何对推文本身进行编码。抱歉…@JonSkeet现在它已被编辑。看起来您正在进行自己的URL编码,但对非ASCII字符使用UTF-16。这就是问题所在。我强烈建议您使用第三方库(或者Android库中的某些东西)来进行URL编码。