好吧,我感谢您的评论和回答。首先,我必须同意这是“另一个愚蠢的面试问题”。的确,在Java中,String已被编码,因此它将始终与UTF-8兼容。字符串的一种检查方法是:
public static boolean isUTF8(String s){ try{ byte[]bytes = s.getBytes("UTF-8"); }catch(UnsupportedEncodingException e){ e.printStackTrace(); System.exit(-1); } return true;}但是,由于所有可打印的字符串都是unipre形式,所以我没有机会得到一个错误。
其次,如果给定一个字节数组,它将始终在-2 ^ 7(0b10000000)至2 ^ 7(0b1111111)范围内,因此它将始终在有效的UTF-8范围内。
我对该问题的最初理解是,给定一个字符串,说“ 0b11111111”,检查它是否为有效的UTF-8,我想我错了。
而且,Java确实提供了将字节数组转换为字符串的构造函数,如果您对解码方法感兴趣,请在此处检查。
还有一件事,以上答案对于另一种语言将是正确的。唯一的改进可能是:
2003年11月,RFC 3629将UTF-8限制为以U +
10FFFF结尾,以匹配UTF-16字符编码的约束。这删除了所有5字节和6字节序列,以及大约4字节序列的一半。
因此4个字节就足够了。
我绝对是这样,如果我错了,请纠正我。非常感谢。



