diff --git a/core/src/main/java/org/jruby/util/io/EncodingUtils.java b/core/src/main/java/org/jruby/util/io/EncodingUtils.java index 809fa37d3eb..50bc30fd5f1 100644 --- a/core/src/main/java/org/jruby/util/io/EncodingUtils.java +++ b/core/src/main/java/org/jruby/util/io/EncodingUtils.java @@ -879,7 +879,7 @@ public static Encoding strTranscode0(ThreadContext context, int argc, IRubyObjec if ((ecflags & EConvFlags.INVALID_MASK) != 0 && explicitlyInvalidReplace) { IRubyObject rep = context.nil; if (!ecopts.isNil()) { - rep = ((RubyHash)ecopts).op_aref(context, runtime.newString("replace")); + rep = ((RubyHash)ecopts).op_aref(context, runtime.newSymbol("replace")); } dest = ((RubyString)str).scrub(context, rep, Block.NULL_BLOCK); if (dest.isNil()) dest = str; diff --git a/spec/regression/GH-3402_spec.rb b/spec/regression/GH-3402_spec.rb new file mode 100644 index 00000000000..a2a926b2a9a --- /dev/null +++ b/spec/regression/GH-3402_spec.rb @@ -0,0 +1,12 @@ +# coding: utf-8 + +require 'rspec' + +# https://github.com/jruby/jruby/issues/3402 +describe 'String#encode with :replace option' do + it 'returns correct value' do + str = "testing\xC2".encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "foo123") + expect(str).to eq "testingfoo123" + end +end +