At least with that lookup table below, you can detect isolated continuation bytes (192 and 193) and invalid codes (above 244).__gshared static immutable ubyte[] charWidthTab = [ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ];length 5 and 6 need not to be tested specifically for your goto.
If you use 0 instead of 1 the length check will suffice for throwing on invalid.