c# - 如何在Twitter更新中处理ISO-2022-JP(和其他字符集)?

标签 c# encoding twitter

我的应用程序的一部分接受任意文本,并将其发布为Twitter的更新。一切正常,直到发布外部(非ASCII / UTF7 / 8)字符集,然后一切都不再起作用。

例如,如果有人发布:
に投稿できる

它(在我的Visual Studio调试器代码中)变成:
=?ISO-2022-JP?B?GyRCJEtFajlGJEckLSRrGyhC?=


Googling告诉我,这代表(减号?作为分隔符)
=?ISO-2022-JP是文本编码
?B表示它是base64编码的
GyRCJEtFajlGJEckLSRrGyhC?是编码的字符串

为了我的一生,我不知道如何以原始日语字符的形式将此字符串发布为Twitter的更新。从目前的情况来看,向Twitter发送'=?ISO-2022-JP?B?GyRCJEtFajlGJEckLSRrGyhC?='将会导致发布该消息。 Ive还尝试将字符串分成上述片段,使用System.Text.Encoding从ISO-2022-JP转换为UTF8,反之亦然,base64解码但不解码。此外,ive播放状态更新的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)); 
}


无论我做什么,结果永远不会恢复正常。

编辑:
最后得到它。对于那些在家中跟随的人,这与最后列出的答案非常接近。只是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) + "?=";
  }
}


标准很棒,有很多可供选择。 ISO永远不会让您失望,ISO编码至少要有3种。如果遇到问题,请尝试编码50221和50222。

关于c# - 如何在Twitter更新中处理ISO-2022-JP(和其他字符集)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964042/

相关文章:

c# - 如何获取外键引用的表

ios - 以 UTF-8 格式转换响应时出现问题

c# - 将字段从一个 Windows 窗体传递到另一个 Windows 窗体时,哪种技术更好?

python - SPSS python - 将Unicode写入spss语法文件

objective-c - 使用 UTF-8 时带有错误字符的 NSString

android - Twitter Android 应用程序 - 源代码

swift - Twitter 登录未在 Xcode 模拟器中启动

sql-server - 通信链路故障错误信息

c# - WPF 命令绑定(bind)到祖先属性

c# - 如何以编程方式诊断原因、修复或解决与 Adob​​e ActiveX/COM 相关的错误 0x80004005?