Well, everything is a "big bug of bytes" in computing in the "more general sense", so there's that.
I don't think handling unicode (and even more importantly, specific encodings) in this level of abstraction, and delegating things to second-tier lib support is the way to go. But I don't even see this second-tier support prioritized - for something one would think is half of programming: dealing with strings.
Then you never heard of ropes. Strings are not just vectors, any efficient handling of strings must also deal with small vector optimizations, prefix trees and ropes, besides the neglected unicode nightmares.
You don't want to have that in core, only in the stdlib. Core is fine with vectors and hashes, the rest is built on top of that, plus lists and trees. Do you insist on lists in core? Nobody does that.
Not even the libc has proper strings, you need gnulib or libunistring for that. Neither the libc++ has proper strings.
You are definitely misunderstanding both Zig's stance on this, and how unicode works in a more general sense.