Ser*_*pth 1 c# twitter encoding
我的部分应用程序接受任意文本并将其作为Twitter更新发布.一切正常,直到发布外国(非ASCII/UTF7/8)字符集,然后事情不再有效.
例如,如果有人发布:
に投稿できる
它(在我的Visual Studio调试器中的代码中)变为:
=?ISO-2022-JP?B?GyRCJEtFajlGJEckLSRrGyhC?=
谷歌搜索告诉我,这表示(减去?作为分隔符)
=?ISO-2022-JP是文本编码
?B表示它是base64编码的
?GyRCJEtFajlGJEckLSRrGyhC?是编码的字符串
对于我的生活,我无法弄清楚如何将这个字符串作为Twitter的原始日文字符的更新发布.现在,将'=?ISO-2022-JP?B?GyRCJEtFajlGJEckLSRrGyhC?='发送到Twitter将导致发布.我也尝试将字符串分成几部分,使用System.Text.Encoding从ISO-2022-JP转换为UTF8,反之亦然,base64解码而不是.此外,香港专业教育学院使用状态更新的URL编码,如下所示:
string[] bits = tweetText.Split(new char[] { '?' });
if (bits.Length >= 4)
{
textEncoding = System.Text.Encoding.GetEncoding(bits[1]);
xml = oAuth.oAuthWebRequest(TwitterLibrary.oAuthTwitter.Method.POST, url, "status=" + System.Web.HttpUtility.UrlEncode(decodedText, textEncoding));
}
Run Code Online (Sandbox Code Playgroud)
无论我做什么,结果都不会恢复正常.
编辑:最后得到它.对于那些在家里跟随的人来说,它非常接近下面列出的答案.只是Visual Studios调试器指导我错误的方式和我正在使用的Twitter库中的一个错误.最终结果如下:
decodedText = textEncoding.GetString(System.Convert.FromBase64String(bits[3]));
byte[] originalBytes = textEncoding.GetBytes(decodedText);
byte[] utfBytes = System.Text.Encoding.Convert(textEncoding, System.Text.Encoding.UTF8, originalBytes);
// now, back to string form
decodedText = System.Text.Encoding.UTF8.GetString(utfBytes);
谢谢大家.
这产生了您正在寻找的输出:
using System;
using System.Text;
class Program {
static void Main(string[] args) {
string input = "??????";
Console.WriteLine(EncodeTwit(input));
Console.ReadLine();
}
public static string EncodeTwit(string txt) {
var enc = Encoding.GetEncoding("iso-2022-jp");
byte[] bytes = enc.GetBytes(txt);
char[] chars = new char[(bytes.Length * 3 + 1) / 2];
int len = Convert.ToBase64CharArray(bytes, 0, bytes.Length, chars, 0);
return "=?ISO-2022-JP?B?" + new string(chars, 0, len) + "?=";
}
}
Run Code Online (Sandbox Code Playgroud)
标准很棒,有很多可供选择.ISO从不令人失望,有不少于3个ISO-2022-JP编码.如果您遇到问题,请尝试编码50221和50222.
| 归档时间: |
|
| 查看次数: |
3690 次 |
| 最近记录: |