Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在 linux 中有一个不处理 unicode/UTF8 的控制台应用程序,并且我没有实施它的计划,因为除了这个问题之外没有必要。
用户正在将命令输入到不包含 ascii 字符的提示中,这导致了数据的神秘问题以及应该只包含 ascii 字符的文本配置文件中的问题。
处理这个问题的最佳方法是什么?是否有一种不太复杂的方法可以将 unicode 字符串转换回 ascii 或删除任何无法使用 ascii 字符集的可见部分打印的字符?
Unicode 对我来说似乎是一场彻头彻尾的噩梦。
UTF-8 和许多单字节字符集与 ASCII 兼容,0-127 之间的值代表正确的 ASCII 字符。(在 UTF-8 的情况下,具有多字节序列的字符的每个字节都在此范围之外。)过滤掉其余的可以解决您的问题。
不过,您绝对应该改变态度并支持 UTF-8。
如果需要 ASCII,则测试并拒绝 0-127 之外的任何 char 值作为无效输入。在这种情况下,我不坚持传统的稳健性原则;代码应该很快失败。试图按摩模棱两可的数据会导致奇怪的行为。
当然,很大程度上取决于域,但这是我的默认方法。先严格后放宽条件要比松懈后尝试应用限制来破坏以前工作的代码/配置更容易。