diff --git a/iseq.c b/iseq.c
index 62271ab3c3..281c13ce45 100644
--- a/iseq.c
+++ b/iseq.c
@@ -1780,8 +1780,8 @@ iseq_inspect(const rb_iseq_t *iseq)
 	return rb_sprintf("#<ISeq: uninitialized>");
     }
     else {
-	return rb_sprintf("#<ISeq:%s@%s:%d (%d,%d)-(%d,%d)>",
-			  RSTRING_PTR(iseq->body->location.label), RSTRING_PTR(rb_iseq_path(iseq)),
+	return rb_sprintf("#<ISeq:%"PRIsVALUE"@%"PRIsVALUE":%d (%d,%d)-(%d,%d)>",
+			  iseq->body->location.label, rb_iseq_path(iseq),
 			  iseq->body->location.code_location.beg_pos.lineno,
 			  iseq->body->location.code_location.beg_pos.lineno,
 			  iseq->body->location.code_location.beg_pos.column,
diff --git a/test/ruby/test_iseq.rb b/test/ruby/test_iseq.rb
index 92340bd8fd..6e81c63915 100644
--- a/test/ruby/test_iseq.rb
+++ b/test/ruby/test_iseq.rb
@@ -91,6 +91,11 @@ class TestISeq < Test::Unit::TestCase
     asm = compile(src).disasm
     assert_equal(src.encoding, asm.encoding)
     assert_predicate(asm, :valid_encoding?)
+
+    obj = Object.new
+    name = "\u{2603 26a1}"
+    obj.instance_eval("def #{name}; tap {}; end")
+    assert_include(RubyVM::InstructionSequence.of(obj.method(name)).disasm, name)
   end
 
   LINE_BEFORE_METHOD = __LINE__