Issue #11785 has been updated by Yukihiro Matsumoto.


Agreed. I prefer `String.new("", encoding: 'utf-8')`.

Matz.


----------------------------------------
Feature #11785: add `encoding:` optional argument to `String.new`
https://bugs.ruby-lang.org/issues/11785#change-55360

* Author: Usaku NAKAMURA
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
I propose to add `encoding:` optional argument to `String.new`.

Ruby doesn't have the syntax to specify the encoding of a string literal.
So we're using `String#force_encoding` for the purpose when writing m17n script, just like:

~~~Ruby
str = "\xA4\xA2".force_encoding('euc-jp')
~~~

But when using `frozen-string-literal: true`, `force_encoding` to literals raise RuntimeError.
So, we must write like:

~~~Ruby
str = "\xA4\xA2".dup.force_encoding('euc-jp')
~~~

or, if don't prefer `dup`,

~~~Ruby
str = String.new("\xA4\xA2").force_encoding('euc-jp')
~~~

but these are very unshapely.
To begin with, using `force_encoding` would be the cause of the unshapliness.

Therefore, I propose `encoding:` optional argument of `String.new`.
If it's available, we can write:

~~~Ruby
str = String.new("\xA4\xA2", encoding: 'euc-jp')
~~~

This was proposed at the developer meeting on the last August and was generally favorably accepted (in my impression), but was forgotten after it.




-- 
https://bugs.ruby-lang.org/