/tools/Ruby/lib/ruby/1.8/rexml/encodings/UTF-16.rb

http://github.com/agross/netopenspace · Ruby · 35 lines · 33 code · 2 blank · 0 comment · 2 complexity · cf582a98f8e6778bb000f023ded02086 MD5 · raw file

  1. module REXML
  2. module Encoding
  3. def encode_utf16 content
  4. array_utf8 = content.unpack("U*")
  5. array_enc = []
  6. array_utf8.each do |num|
  7. if ((num>>16) > 0)
  8. array_enc << 0
  9. array_enc << ??
  10. else
  11. array_enc << (num >> 8)
  12. array_enc << (num & 0xFF)
  13. end
  14. end
  15. array_enc.pack('C*')
  16. end
  17. def decode_utf16(str)
  18. str = str[2..-1] if /^\376\377/n =~ str
  19. array_enc=str.unpack('C*')
  20. array_utf8 = []
  21. 0.step(array_enc.size-1, 2){|i|
  22. array_utf8 << (array_enc.at(i+1) + array_enc.at(i)*0x100)
  23. }
  24. array_utf8.pack('U*')
  25. end
  26. register(UTF_16) do |obj|
  27. class << obj
  28. alias decode decode_utf16
  29. alias encode encode_utf16
  30. end
  31. end
  32. end
  33. end