mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/net/imap.rb (decode_utf7, encode_utf7): refactored by
Nobuyoshi Nakada, to use String#encode. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35604 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e62c35fb8f
commit
2e63cd97c1
3 changed files with 24 additions and 14 deletions
|
|
@ -1,3 +1,8 @@
|
||||||
|
Wed May 9 16:01:38 2012 Shugo Maeda <shugo@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/net/imap.rb (decode_utf7, encode_utf7): refactored by
|
||||||
|
Nobuyoshi Nakada, to use String#encode.
|
||||||
|
|
||||||
Wed May 9 13:26:25 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Wed May 9 13:26:25 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* test/rubygems/test_gem_remote_fetcher.rb: skip OpenSSL dependent
|
* test/rubygems/test_gem_remote_fetcher.rb: skip OpenSSL dependent
|
||||||
|
|
|
||||||
|
|
@ -955,27 +955,22 @@ module Net
|
||||||
# Net::IMAP does _not_ automatically encode and decode
|
# Net::IMAP does _not_ automatically encode and decode
|
||||||
# mailbox names to and from utf7.
|
# mailbox names to and from utf7.
|
||||||
def self.decode_utf7(s)
|
def self.decode_utf7(s)
|
||||||
return s.gsub(/&(.*?)-/n) {
|
return s.gsub(/&([^-]+)?-/n) {
|
||||||
if $1.empty?
|
if $1
|
||||||
"&"
|
($1.tr(",", "/") + "===").unpack("m")[0].encode(Encoding::UTF_8, Encoding::UTF_16BE)
|
||||||
else
|
else
|
||||||
base64 = $1.tr(",", "/")
|
"&"
|
||||||
x = base64.length % 4
|
|
||||||
if x > 0
|
|
||||||
base64.concat("=" * (4 - x))
|
|
||||||
end
|
|
||||||
base64.unpack("m")[0].unpack("n*").pack("U*")
|
|
||||||
end
|
end
|
||||||
}.force_encoding("UTF-8")
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# Encode a string from UTF-8 format to modified UTF-7.
|
# Encode a string from UTF-8 format to modified UTF-7.
|
||||||
def self.encode_utf7(s)
|
def self.encode_utf7(s)
|
||||||
return s.gsub(/(&)|([^\x20-\x7e]+)/u) {
|
return s.gsub(/(&)|[^\x20-\x7e]+/) {
|
||||||
if $1
|
if $1
|
||||||
"&-"
|
"&-"
|
||||||
else
|
else
|
||||||
base64 = [$&.unpack("U*").pack("n*")].pack("m")
|
base64 = [$&.encode(Encoding::UTF_16BE)].pack("m")
|
||||||
"&" + base64.delete("=\n").tr("/", ",") + "-"
|
"&" + base64.delete("=\n").tr("/", ",") + "-"
|
||||||
end
|
end
|
||||||
}.force_encoding("ASCII-8BIT")
|
}.force_encoding("ASCII-8BIT")
|
||||||
|
|
|
||||||
|
|
@ -18,16 +18,26 @@ class IMAPTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_encode_utf7
|
def test_encode_utf7
|
||||||
|
assert_equal("foo", Net::IMAP.encode_utf7("foo"))
|
||||||
|
assert_equal("&-", Net::IMAP.encode_utf7("&"))
|
||||||
|
|
||||||
utf8 = "\357\274\241\357\274\242\357\274\243".force_encoding("UTF-8")
|
utf8 = "\357\274\241\357\274\242\357\274\243".force_encoding("UTF-8")
|
||||||
s = Net::IMAP.encode_utf7(utf8)
|
s = Net::IMAP.encode_utf7(utf8)
|
||||||
assert_equal("&,yH,Iv8j-".force_encoding("UTF-8"), s)
|
assert_equal("&,yH,Iv8j-", s)
|
||||||
|
s = Net::IMAP.encode_utf7("foo&#{utf8}-bar".encode("EUC-JP"))
|
||||||
|
assert_equal("foo&-&,yH,Iv8j--bar", s)
|
||||||
|
|
||||||
utf8 = "\343\201\202&".force_encoding("UTF-8")
|
utf8 = "\343\201\202&".force_encoding("UTF-8")
|
||||||
s = Net::IMAP.encode_utf7(utf8)
|
s = Net::IMAP.encode_utf7(utf8)
|
||||||
assert_equal("&MEI-&-".force_encoding("UTF-8"), s)
|
assert_equal("&MEI-&-", s)
|
||||||
|
s = Net::IMAP.encode_utf7(utf8.encode("EUC-JP"))
|
||||||
|
assert_equal("&MEI-&-", s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_decode_utf7
|
def test_decode_utf7
|
||||||
|
assert_equal("&", Net::IMAP.decode_utf7("&-"))
|
||||||
|
assert_equal("&-", Net::IMAP.decode_utf7("&--"))
|
||||||
|
|
||||||
s = Net::IMAP.decode_utf7("&,yH,Iv8j-")
|
s = Net::IMAP.decode_utf7("&,yH,Iv8j-")
|
||||||
utf8 = "\357\274\241\357\274\242\357\274\243".force_encoding("UTF-8")
|
utf8 = "\357\274\241\357\274\242\357\274\243".force_encoding("UTF-8")
|
||||||
assert_equal(utf8, s)
|
assert_equal(utf8, s)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue