Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Unicode解码何时应因异常而中断?_String_Unicode_Utf 8_Utf8 Decode - Fatal编程技术网

String Unicode解码何时应因异常而中断?

String Unicode解码何时应因异常而中断?,string,unicode,utf-8,utf8-decode,String,Unicode,Utf 8,Utf8 Decode,我正在致力于将Unicode支持引入窄字符串应用程序,在研究它如何无忧无虑地处理所有的字符*字符串时,我想到了以下几点: 在对Unicode进行解码时,程序员通常可以选择三种方法来处理格式错误的字符串—忽略所有解码错误、从结果字符串中删除无效字符、在第一次解码错误中出错,或者用替换字符替换无法解码的任何内容 我不喜欢因为安全原因而忽略这种方法——很容易使字符串看起来很好,但在去掉精心设计的错误后就变得很糟糕了。在这种情况下,用替换字符替换错误要好得多——看起来可能更糟,但有明显的视觉迹象表明事情

我正在致力于将Unicode支持引入窄字符串应用程序,在研究它如何无忧无虑地处理所有的字符*字符串时,我想到了以下几点:

在对Unicode进行解码时,程序员通常可以选择三种方法来处理格式错误的字符串—忽略所有解码错误、从结果字符串中删除无效字符、在第一次解码错误中出错,或者用替换字符替换无法解码的任何内容

我不喜欢因为安全原因而忽略这种方法——很容易使字符串看起来很好,但在去掉精心设计的错误后就变得很糟糕了。在这种情况下,用替换字符替换错误要好得多——看起来可能更糟,但有明显的视觉迹象表明事情没有按计划进行,而且替换字符不允许单词以不同的含义合并


但在第一次出错后抛出异常或停止解码的实际用例是什么?这种“验证”的意义是什么?让我们假设某个函数得到了一个显然无效的UTF8字符串-程序员应该如何利用这些知识?

答案是,这取决于。在很多事情上,包括你的语言是否有例外。这个问题太宽泛了。好吧,Python有例外。C不会,但C解码器可以停止解码并返回某种错误条件标志。这个问题根本不依赖于语言功能。你能澄清一些“其他事情”吗?对我来说,这个问题相当狭隘——我对选择解码器失败的原因感兴趣,而解码失败从来都不是关键。