Ruby 如何解码 GB2312 字符串?

island205 · 2013年05月14日 · 最后由 island205 回复于 2013年06月19日 · 8515 次阅读

使用 ruby 读取 gmail 邮件遇到的问题:

一封邮件的标题为: =?GB2312?B?NS4xMiC98czs0ru149KysrvApw==?=

去掉说明符: NS4xMiC98czs0ru149KysrvApw==

使用 Base64 在线编码、解码 Base64 encode/decode online 解码为: 5.12 今天一点也不困

我想问的是,如何使用 ruby 解码这段字符得到结果,当然其他语言的也行。

ruby -rbase64 -e 'puts Base64.decode64("NS4xMiC98czs0ru149KysrvApw==").force_encoding("gbk").encode(Encoding.default_external)'

>>> from email.header import decode_header
>>> for s, c in decode_header("=?GB2312?B?NS4xMiC98czs0ru149KysrvApw==?="):
...     print s.decode(c)
...
5.12 今天一点也不困
>>> 

#1 楼 @luikore 你那样不科学,header 里其实可以不同编码混合乱来的

#3 楼 @bhuztez 哦,这是标准的话可以用 email header 对应的 parser 啊

require 'mail'
Mail::Encodings.value_decode "=?GB2312?B?NS4xMiC98czs0ru149KysrvApw==?="

#4 楼 @luikore 你那不是自带的库吧...

#3 楼 @bhuztez 你好,能问一下 header 里其实可以不同编码混合乱来是什么意思吗?

#6 楼 @youseke

Subject: =?GB2312?B?xxxxxxxxxxx?= =?utf-8?q?xxxxxxxxxxxx?=

#5 楼 @bhuztez 是不是自带的没关系吧,mail 这个 gem 装过 rails 都会有的

@luikore @bhuztez @youseke 谢谢各位,最终我用了 Encodings.value_decode

需要 登录 后方可回复, 如果你还没有账号请 注册新账号