在不处理它的应用程序中使用unicode / UTF8处理/清理用户输入

时间:2013-01-15 20:57:46

标签: c++ linux unicode utf-8

我在Linux中有一个控制台应用程序,它不处理unicode / UTF8,我没有实现它的计划,因为除了这个问题之外没有其他需要。

用户正在向不包含ascii字符的提示输入命令,这对数据的神秘问题以及应该只包含ascii字符的文本配置文件造成了悲痛。

处理此问题的最佳方法是什么? 是否有一种不太复杂的方法将unicode字符串转换回ascii或删除任何使用ascii字符集的可见部分删除无法打印的字符?

Unicode对我来说似乎也是一场彻头彻尾的噩梦。

2 个答案:

答案 0 :(得分:3)

UTF-8和许多单字节字符集是ASCII兼容的,0-127之间的值表示正确的ASCII字符。 (对于UTF-8,具有多字节序列的每个字符字节都在此范围之外。)过滤掉其余字符可以解决您的问题。

你绝对应该改变态度并支持UTF-8。

答案 1 :(得分:0)

如果需要ASCII,则测试并拒绝0-127之外的任何char值作为无效输入。在这样的情况下,我不认同传统的robustness principle;代码应fail fast。尝试按下模棱两可的数据将导致weird behaviour

当然,很大程度上取决于域名,但这是我的默认方法。更容易先严格要求,放松条件的时间要晚于松散,然后尝试应用限制以破坏之前正在运行的代码/配置。