我有可以在UTF-16中正常加載.NET的平面文件,即使它們在技術上是UCS2-LE(w/o BOM),而且我明白這是因爲UCS-2是UTF-16替代的較老的標準。如何在.NET中確定文件是UCS-2還是UTF-16
但是,我感興趣的是能夠確定文件是否實際上是UCS-2。我知道這意味着我會猜測。我嘗試過使用chardet的.NET端口,IMultilang2 interop,以及Novell的一些開源代碼,因爲它試圖通過UTF-16來確定UCS-2,我還沒有取得任何成功。我還沒有找到任何技術可以確定UCS-2LE沒有BOM和無效/過長的UTF-8之間的差異。
我應該檢查他們字節的字節,並試圖確定它是變量還是固定長度編碼?也許看看缺少的代碼點?問題是這些文本文件沒有特殊的代碼點,它們只有bog標準的西方字符集。但TextPad將它們保存爲不帶BOM的UCS2-LE,並且它使我們的軟件中的下游文件操作變得複雜,並希望它們完全符合UTF-16(只是強制加載文件,但不能滿足軟件要求)。
這可能有所幫助:[https://lists.ubuntu.com/archives/bazaar/2007q2/025942.html](https://lists.ubuntu.com/archives/bazaar/2007q2/025942.html)引用:*在解釋過去用法中「UCS-2」的含義時,最好認爲它不是數據格式,而是表示 實現不解釋任何補充字符。特別地,爲了數據交換的目的,UCS-2和UTF-16是 相同的格式。兩者都是16位,並且具有完全相同的代碼單元 表示。* –
這就是問題;我可以使用現有的啓發式方法檢測UTF-16,但這些實現無法找出UCS-2LE沒有BOM文件。我想對待它們,但我最終不得不使用後備編碼,因爲我找不到一種方法來確定差異。 –