On Wednesday, 1 July 2015 at 17:13:03 UTC, Taylor Hillegeist
wrote:
string q = cast(string)
(A.cycle.take(seg1len).array
~B.cycle.take(seg2len).array
~C.cycle.take(seg3len).array);
q.writeln;
I was wondering if it might be the cast?
Yes, the cast is wrong. You're reinterpreting (not converting) an
array of `dchar`s (UTF-32 code units) as an array of `char`s
(UTF-8 code units).
If you print the numeric values of the string, e.g. via
std.string.representation, you can see that every actual
character has three null bytes following it:
----
import std.string: representation;
writeln(q.representation);
----
[65, 0, 0, 0, 97, 0, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0, 97, 0, 0, 0,
65, 0, 0, 0, 65, 0, 0, 0, 97, 0, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0,
66, 0, 0, 0, 98, 0, 0, 0, 66, 0, 0, 0, 98, 0, 0, 0, 67, 0, 0, 0,
99, 0, 0, 0, 67, 0, 0, 0, 99, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0,
99, 0, 0, 0, 67, 0, 0, 0, 99, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0]
----
Use std.conv.to for less surprising conversions. And don't use
casts unless you know exactly what you're doing.