1 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
6 def self.iconv_to_utf8(from, str)
7 iconv = Iconv.new(from, "UTF-8")
10 out << iconv.iconv(str)
11 rescue Iconv::IllegalSequence => e
13 ch, str = e.failed.split(//u, 2)
14 out << if respond_to?(:unknown_unicode_handler)
15 u = ch.unpack("U").first
16 unknown_unicode_handler(u)
25 def self.unknown_unicode_handler (u)
26 sprintf("&#x%04x;", u)
29 def self.iconv_to_from(to, from, str)
30 iconv = Iconv.new(to, from)
33 out << iconv.iconv(str)
34 rescue Iconv::IllegalSequence => e
36 ch, str = e.failed.split(//u, 2)
39 rescue Iconv::InvalidCharacter => e
41 ch, str = e.failed.split(//u, 2)
50 def euctou8() Iconv.iconv_to_from("UTF-8", "EUC-JP", self) end
51 def u8toeuc() Iconv.iconv_to_from("EUC-JP", "UTF-8", self) end
52 def sjistou8() Iconv.iconv_to_from("UTF-8", "Shift_JIS", self) end
53 def u8tosjis() Iconv.iconv_to_from("Shift_JIS", "UTF-8", self) end
54 def jistou8() Iconv.iconv_to_from("UTF-8", "ISO-2022-JP", self) end
57 i = Iconv.new("ISO-2022-JP", "UTF-8")
62 Iconv.iconv_to_from("UTF-16", "UTF-8", self).sub(/\A\376\377/, "")
66 Iconv.iconv_to_from("UTF-32", "UTF-8", self).sub(/\A\0\0\376\377/, "")
70 Iconv.iconv_to_from("UTF-8", "UTF-32", self)
74 Iconv.iconv_to_from("UTF-16", "UTF-32", self).sub(/\A\376\377/, "")
77 def u16toeuc() Iconv.iconv_to_from("EUC-JP", "UTF-16", self) end
78 def u16tosjis() Iconv.iconv_to_from("Shift_JIS", "UTF-16", self) end
81 return 0 if length == 0
83 return (s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3])
88 def self.u8tou4(s) s.u8tou32; end
89 def self.u4tou8(s) s.u32tou8; end
90 def self.u4tou16(s) s.u32tou16; end
91 def self.u16toeuc(s) s.u16toeuc; end
92 def self.u16tosjis(s) s.u16tosjis; end