From b9ae056b4befc0b2ac985fa1456ee79cc91d1584 Mon Sep 17 00:00:00 2001 From: Damion Junk Date: Mon, 7 Apr 2014 15:34:41 -0400 Subject: [PATCH 1/2] forcing incoming string encoding to ASCII-8BIT before processing --- lib/edn/string_transformer.rb | 1 + spec/edn/transform_spec.rb | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/lib/edn/string_transformer.rb b/lib/edn/string_transformer.rb index d8f8901..f675db2 100644 --- a/lib/edn/string_transformer.rb +++ b/lib/edn/string_transformer.rb @@ -23,6 +23,7 @@ module StringTransformer def self.parse_string(string) string = string.to_s return '' if string.empty? + string = string.force_encoding Encoding::ASCII_8BIT string = string.gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c| #" Clear messed up syntax highlighting with Emacs. if u = UNESCAPE_MAP[$&[1]] diff --git a/spec/edn/transform_spec.rb b/spec/edn/transform_spec.rb index 2cbe755..b390d50 100644 --- a/spec/edn/transform_spec.rb +++ b/spec/edn/transform_spec.rb @@ -1,3 +1,4 @@ +# encoding: utf-8 require 'spec_helper' describe EDN::Transform do @@ -26,6 +27,12 @@ subject.apply(:string => 'hello\n#{world}').should == "hello\n\#{world}" end end + + context "string-utf8" do + it "should emit a string that preserves utf-8 characters" do + subject.apply(:string => 'öhai world').should == "öhai world" + end + end context "keyword" do it "should emit a Ruby symbol" do From c10de053b77792dba3199f8a2a874b78a833ba99 Mon Sep 17 00:00:00 2001 From: Damion Junk Date: Mon, 7 Apr 2014 15:39:05 -0400 Subject: [PATCH 2/2] sytle- removing reassignment of mutable string --- lib/edn/string_transformer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/edn/string_transformer.rb b/lib/edn/string_transformer.rb index f675db2..2a23ad3 100644 --- a/lib/edn/string_transformer.rb +++ b/lib/edn/string_transformer.rb @@ -23,7 +23,7 @@ module StringTransformer def self.parse_string(string) string = string.to_s return '' if string.empty? - string = string.force_encoding Encoding::ASCII_8BIT + string.force_encoding Encoding::ASCII_8BIT string = string.gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c| #" Clear messed up syntax highlighting with Emacs. if u = UNESCAPE_MAP[$&[1]]