l'essentiel est invisible pour les yeux

Thursday, March 22, 2007

[Rails] SoftBank携帯からの制御文字を含む入力の変換に関するバグFix (Mobile on Rails)

SoftBank携帯からフォームを通して入力された文字列中に制御文字列が含まれる際に変換がおかしくなるバグを直しました。(Revision 49)

Mobil on Rails

また、SoftBank(Vodafone)の3G携帯にはSJISの外字領域を使用して絵文字を送出する機種が存在します。それらの機種については現在未対応(絵文字は全て削除される)です。

SoftBankの絵文字のSJIS(hex)データを載せたドキュメントがPDFしかなくセキュリティ上の理由でテキストに変換することもできないため、現在キャプチャを取って画像として起こしてOCRでテキストデータへの変換をするというバッドノウハウで対応中。


Index: lib/mobile/emoji/softbank.rb
===================================================================
--- lib/mobile/emoji/softbank.rb (レビジョン 48)
+++ lib/mobile/emoji/softbank.rb (レビジョン 49)
@@ -13,9 +13,15 @@
bytes = str.unpack('C*')
len = bytes.length
ret = ''
while i < len do
- if bytes[i] != 0x1b
- ret += [sprintf("%x", bytes[i])].pack('H2')
+ if bytes[i] != 0x1b # Not emoticons
+ # Multibyte characters
+ if (bytes[i] > 0x80 && bytes[i] < 0xa0) || (bytes[i] > 0xdf && bytes[i] < 0xf0)
+ ret += [sprintf("%x%x", bytes[i], bytes[i+=1])].pack('H4')
+ else # Single byte character
+ ret += [bytes[i]].pack('C')
+ end
else
emoji_bytes = []
emoji_bytes << bytes[i] while bytes[i+=1] != 0x0f




Index: test/emoji_test.rb
===================================================================
--- test/emoji_test.rb (レビジョン 48)
+++ test/emoji_test.rb (レビジョン 49)
@@ -81,6 +82,7 @@

def test_softbank_convert_internal_encode
assert_equal Emoji::SoftBank::Convert.convert_internal_encode(@sb_binary), @sb_internal
+ assert_equal Emoji::SoftBank::Convert.convert_internal_encode(@sb_binary_with_ascii), @sb_internal_with_ascii
assert_equal Emoji::AU::Convert.convert_internal_encode(@m_sb_binary), @m_sb_internal
end