У меня есть плоские файлы, которые я могу нормально загрузить в .NET в UTF-16, хотя технически они являются UCS2-LE (без спецификации), и я понимаю, что это потому, что UCS-2 является более старым стандартом, чем UTF-16. заменяет.
Однако меня интересует возможность определить, действительно ли файл является UCS-2. Я знаю, что это означает, что я буду гадать. Я пробовал .NET-порты chardet, IMultilang2 interop и некоторый открытый исходный код от Novell для попытки определить определение UCS-2 поверх UTF-16, и у меня не было никакого успеха. Я не нашел никакого метода, который мог бы определить разницу между UCS-2LE без спецификации и недействительным/сверхдлинным UTF-8.
Должен ли я проверять их байт за байтом и пытаться решить, является ли это кодировкой переменной или фиксированной длины? Может быть, искать недостающие кодовые точки? Проблема в том, что эти текстовые файлы не имеют специальных кодовых точек, они имеют только стандартный западный набор символов. Но TextPad сохраняет их как UCS2-LE без BOM, и это усложняет последующие файловые операции в нашем программном обеспечении, которое хочет, чтобы они были полностью совместимы с UTF-16 (и просто принудительная загрузка файлов работает, но не будет работать с требованиями программного обеспечения). ).