/statuses/update.json - 在状态中包含'æ'时出错32

时间:2015-11-03 19:30:32

标签: json twitter unicode oauth emoji

使用回调URL的REST API .NET 4.5后端应用程序。

只是陈述一些我已经做过的事情......

  1. 针对twitter oauth tester验证基本签名字符串
  2. 尝试了所有第三方回购包括Linq2Twitter,TweetSharp等。
  3. 验证了2字节的unicode字符是否正确编码,并且与通过oauth测试器生成的twitter完全匹配。
  4. 我的应用程序交叉发布(按用户)可以正常使用Twitter。只有包含未保留的字符和表情符号时,问题才可重现。有没有人有解决这个确切问题的真实经验?

1 个答案:

答案 0 :(得分:0)

Http.CS 评论以下......

//headers["Accept-Language"] = "en-us,en;q=0.5";
//headers["Accept-Encoding"] = "gzip,deflate";
//headers["Accept-Charset"] = "utf-8;q=0.7,*;q=0.7";

UrlEncoder.cs

public static string UrlEncode(string value)
    {
        const string ReservedChars = @"`!@#$%^&*()_-+=.~,:;'?/|\[] ";
        const string UnReservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";

        var result = new StringBuilder();

        if (string.IsNullOrWhiteSpace(value))
            return string.Empty;

        foreach (string symbol in value.AsCodePoints())
        {
            if (symbol.Length == 1 && UnReservedChars.IndexOf(symbol, StringComparison.CurrentCulture) != -1)
            {
                result.Append(symbol);
            }
            else if (symbol.Length == 1 && ReservedChars.IndexOf(symbol, StringComparison.CurrentCulture) != -1)
            {
                result.Append('%' + String.Format("{0:X2}", (int)symbol.ToCharArray().First()).ToUpper());
            }
            else
            {
                string symbolString = symbol;
                var encoded = Uri.EscapeDataString(symbolString).ToUpper();

                if (!string.IsNullOrWhiteSpace(encoded))
                {
                    result.Append(encoded);
                }
            }
        }

        return result.ToString();
    }

OAUTH没有任何改变。这完全是关于角色的编码。