diff options
Diffstat (limited to 'lib/rexml')
-rw-r--r-- | lib/rexml/encoding.rb | 4 | ||||
-rw-r--r-- | lib/rexml/source.rb | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/lib/rexml/encoding.rb b/lib/rexml/encoding.rb index 644957439e..8acc8a3698 100644 --- a/lib/rexml/encoding.rb +++ b/lib/rexml/encoding.rb @@ -54,8 +54,8 @@ module REXML def check_encoding str # We have to recognize UTF-16, LSB UTF-16, and UTF-8 - return UTF_16 if str[0] == 254 && str[1] == 255 - return UNILE if str[0] == 255 && str[1] == 254 + return UTF_16 if /\A\xfe\xff/n =~ str + return UNILE if /\A\xff\xfe/n =~ str str =~ /^\s*<?xml\s*version=(['"]).*?\2\s*encoding=(["'])(.*?)\2/um return $1.upcase if $1 return UTF_8 diff --git a/lib/rexml/source.rb b/lib/rexml/source.rb index cacab221db..c51f504811 100644 --- a/lib/rexml/source.rb +++ b/lib/rexml/source.rb @@ -135,14 +135,14 @@ module REXML # the XML spec. If there is one, we can determine the encoding from # it. str = @source.read( 2 ) - if (str[0] == 254 && str[1] == 255) || (str[0] == 255 && str[1] == 254) - @encoding = check_encoding( str ) + if /\A(?:\xfe\xff|\xff\xfe)/n =~ str + self.encoding = check_encoding( str ) @line_break = encode( '>' ) else @line_break = '>' end super str+@source.readline( @line_break ) - end + end def scan(pattern, cons=false) rv = super |