Returns a new \String that is a copy of +string+. With no arguments, returns the empty string with the Encoding ASCII-8BIT: s = String.new s # => "" s.encoding # => # With the single \String argument +string+, returns a copy of +string+ with the same encoding as +string+: s = String.new('Que veut dire ça?') s # => "Que veut dire ça?" s.encoding # => # Literal strings like "" or here-documents always use Encoding@Script+encoding, unlike String.new. With keyword +encoding+, returns a copy of +str+ with the specified encoding: s = String.new(encoding: 'ASCII') s.encoding # => # s = String.new('foo', encoding: 'ASCII') s.encoding # => # Note that these are equivalent: s0 = String.new('foo', encoding: 'ASCII') s1 = 'foo'.force_encoding('ASCII') s0.encoding == s1.encoding # => true With keyword +capacity+, returns a copy of +str+; the given +capacity+ may set the size of the internal buffer, which may affect performance: String.new(capacity: 1) # => "" String.new(capacity: 4096) # => "" The +string+, +encoding+, and +capacity+ arguments may all be used together: String.new('hello', encoding: 'UTF-8', capacity: 25)