The solution I suggested only makes one copy (the array slice), whereas yours makes two (`bytestring()` makes its own copy). It doesn't check the UTF-8 validity, but, actually, neither does your code. It would if you didn't call `bytestring()` (but it would still make a copy).
I don't know if it's possible to create the uint8 1-array faster than using the slice operator, but I'd be surprised if it was.
How does this perform compared to your version?
function another_copy!(dest::Array{UTF8String},dsto,src::Array{Uint8,2},n,ind)
for i=1:n
@inbounds arrayset(dest, UTF8String([:,i]), i+dsto-1)
end
end