diff --git a/std/utf.d b/std/utf.d index 9df5d14a090..9fb4e39caa6 100644 --- a/std/utf.d +++ b/std/utf.d @@ -3599,8 +3599,27 @@ template byUTF(C) if (isSomeChar!C) if (pos == fill) { pos = 0; - fill = cast(ushort)encode!(UseReplacementDchar.yes)( - buf, decodeFront!(UseReplacementDchar.yes)(r)); + auto c = r.front; + + if (c <= 0x7F) + { + fill = 1; + r.popFront; + buf[pos] = cast(C) c; + } + else + { + static if (is(RC == dchar)) + { + fill = cast(ushort) encode!(UseReplacementDchar.yes)(buf, c); + r.popFront; + } + else + { + fill = cast(ushort) encode!(UseReplacementDchar.yes)( + buf, decodeFront!(UseReplacementDchar.yes)(r)); + } + } } return buf[pos]; }