Changeset 678
- Timestamp:
- 01/12/03 11:16:08 (6 years ago)
- Files:
-
- trunk/lib/soap/charset.rb (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/charset.rb
r605 r678 21 21 22 22 module Charset 23 @xmlInstanceEncoding = $KCODE24 23 @dataModelEncoding = $KCODE 24 25 class CharsetError < SOAP::Error; end 26 class UnknownCharsetError < CharsetError; end 27 class CharsetConversionError < CharsetError; end 25 28 26 29 public … … 47 50 EncodingConvertMap[ [ 'SJIS', 'UTF8' ] ] = Uconv.method( :sjistou8 ) 48 51 49 @xmlInstanceEncoding = 'UTF8'50 52 @dataModelEncoding = 'UTF8' 51 53 rescue LoadError … … 71 73 end 72 74 73 def Charset. setXMLInstanceEncoding( streamEncoding )74 @xmlInstanceEncoding = streamEncoding75 def Charset.getEncodingLabel 76 getCharsetLabel( @dataModelEncoding ) 75 77 end 76 78 77 def Charset. getXMLInstanceEncoding78 @xmlInstanceEncoding79 def Charset.encodingToXML( str, charset ) 80 codeConv( str, @dataModelEncoding, getCharsetStr( charset )) 79 81 end 80 82 81 def Charset.encodingToXML( str ) 82 codeConv( str, getEncoding, getXMLInstanceEncoding ) 83 end 84 85 def Charset.encodingFromXML( str ) 86 codeConv( str, getXMLInstanceEncoding, getEncoding ) 83 def Charset.encodingFromXML( str, charset ) 84 codeConv( str, getCharsetStr( charset ), @dataModelEncoding ) 87 85 end 88 86 89 87 def Charset.codeConv( str, encFrom, encTo ) 90 return str if encFrom == encTo 91 if encFrom == 'NONE' or encTo == 'NONE' 92 return str 88 if encFrom == encTo or encFrom == 'NONE' or encTo == 'NONE' 89 str 90 elsif converter = EncodingConvertMap[[ encFrom, encTo ]] 91 converter.call( str ) 92 else 93 raise CharsetConversionError.new( 94 "Converter not found: #{ encFrom } -> #{ encTo }" ) 95 # In 1.4.7 or earlier, it only ignored encoding mismatch. 96 # str 93 97 end 94 if converter = EncodingConvertMap[ [ encFrom, encTo ] ]95 return converter.call( str )96 end97 str98 end99 100 def Charset.getXMLInstanceEncodingLabel101 getCharsetLabel( getXMLInstanceEncoding )102 98 end 103 99 … … 107 103 108 104 def Charset.getCharsetStr( label ) 109 if label 110 CharsetMap.index( label.downcase ) || 'NONE' 111 else 112 'NONE' 113 end 105 CharsetMap.index( label.downcase ) 114 106 end 115 107 … … 163 155 isSJIS( str ) 164 156 else 165 raise RuntimeError.new( "Unknown encoding: #{ code }" )157 raise UnknownCharsetError.new( "Unknown charset: #{ code }" ) 166 158 end 167 159 end