如何检查文本文件是否在C ++中以UTF-8编码?
答案 0 :(得分:4)
尝试将其读作UTF-8并查看UTF-8编码是否损坏,如果没有,是否只有有效的Unicode点。
但仍然不能保证文件是UTF-8或ASCII或其他东西。您如何解释包含单个字节的文件,即A
字母? ASCII? UTF-8?其他?同样,如果文件以BOM
开头纯粹运气,但不是真正的UTF-8或者不是UTF-8,该怎么办?
This article可能会引起人们的兴趣。
答案 1 :(得分:4)
您永远无法确定任何二进制数据是意图来表示UTF-8。但是,您始终可以检查是否可以解释为UTF-8。最简单的方法是尝试转换它(比如UTF-32),看看你是否没有错误。如果您只需要验证,那么您可以在不实际编写输出的情况下执行相同的操作。 (你需要自己写这个,但这很容易。)
请注意,出于安全原因,必须在第一次出错时完全中止转换,而不是试图以某种方式“恢复”。
答案 2 :(得分:0)
尝试转换为UTF-16。如果没有错误,那很可能是UTF-8。 但无论你做什么,它仍然是最好的猜测。