我正致力于将Unicode支持带入窄字符串应用程序,并且在查看无忧无虑如何处理它的所有 - char *
字符串时,不要因为考虑到一个无效的字符串,它让我想到以下几点:
当解码Unicode时,程序员通常会有三种选择来处理错误的字符串 - 忽略所有解码错误,从结果字符串中删除无效字符,偶然发现第一个解码错误,或者替换任何可以解决的问题。用替换字符解码。
由于安全原因,我不喜欢忽略方法 - 在第一眼看起来很容易制作看起来很好的字符串,但在剥离精心设计的错误后会变得邪恶。在这种情况下,用替换字符替换错误要好得多 - 它可能看起来更糟糕,但是有明显的视觉指示不符合计划,以及替换字符不允许单词以不同的含义合并。
但是,在第一次出错后抛出异常或停止解码的现实用例是什么?这样的"验证&#34 ;?有什么意义?让我们假设一些函数有一个看似无效的UTF8字符串 - 程序员应该用这些知识做什么?