Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Encoding 如何检测八度音阶中的文件编码?_Encoding_Octave - Fatal编程技术网

Encoding 如何检测八度音阶中的文件编码?

Encoding 如何检测八度音阶中的文件编码?,encoding,octave,Encoding,Octave,我正在处理许多XML文件,其中一些是UTF-8,而大多数是ANSI 在UTF-8文件中,XML头声明: <?xml version="1.0" encoding="ISO8859-1" ?> 然而,这些信息是错误的 这产生的问题是,我使用unicode2ntive生成正确的XLS文件,当文件采用UTF-8编码时,会生成错误的输出 如何以编程方式检测每个文件的真实编码 在文本编辑器的帮助下手动查找它们不是一个可行的选择,因为有数百个文件,我的解决方案必须处理更多我无法访问的文件。

我正在处理许多XML文件,其中一些是UTF-8,而大多数是ANSI

在UTF-8文件中,XML头声明:

<?xml version="1.0" encoding="ISO8859-1" ?>

然而,这些信息是错误的

这产生的问题是,我使用
unicode2ntive
生成正确的XLS文件,当文件采用UTF-8编码时,会生成错误的输出

如何以编程方式检测每个文件的真实编码


在文本编辑器的帮助下手动查找它们不是一个可行的选择,因为有数百个文件,我的解决方案必须处理更多我无法访问的文件。

我为Windows 10找到的缓和解决方案,而我找不到在纯倍频程中执行此操作的正确方法:

[~, output] = system(['file --mime-encoding "', fileAddress, '"']);
encoding = strsplit(output)(columns(strsplit(output, ' '))){1};

if strcmp('utf-8', encoding)
  sheet(1, 1) = {strcat('', unicode2native(myText, 'ISO-8859-1'))};
else
  sheet(1, 1) = {myText};
endif

一般来说,没有简单的方法可以做到这一点:因为给定的文件可能是多个编码中的有效序列,所以检测字符编码需要使用能够感知自然语言特征(如字符频率、常用词等)的启发式方法

Octave对此没有直接的支持。因此,您需要使用外部程序或库。选项包括、和其他。chardet可能是最容易使用的,因为您可以安装它并将其作为外部命令调用,而不是使用库构建自定义程序或oct文件。或者juniversalchardet,因为如果您有一个支持Java的Octave构建,那么很容易从Octave代码中引入并使用Java库

如果您的输入文件都是ANSI(Windows 1252/ISO 8859-1)或UTF-8,并且没有其他编码,那么您可能只需要检查每个文件的内容,看看它是否是有效的UTF-8字符串,并假设任何无效的UTF-8都是ANSI。只有某些字节序列是有效的UTF-8编码,因此ANSI编码的文件很可能不是有效的UTF-8。我认为您可以通过在文件上执行
utf8\u bytes=unicode2native(file\u contents,'UTF-8')
检查文件是否为纯八度有效的UTF-8,并查看
utf8\u bytes
输出是否与直接将
file\u contents
转换为
uint8
相同。如果这不起作用,您可以回过头来使用Java的字符编码支持(并且您可以在任何支持Java的倍频程构建上使用Java标准库,而无需加载外部JAR文件)


如果您的所有输入文件都是UTF-8或严格意义上的7位ASCII,那么您可以将它们都视为UTF-8,因为7位ASCII是UTF-8的有效子集。

请澄清您的问题。“正确的XLS文件”指的是旧的Microsoft Excel文件格式吗?如果编码键/值对不正确,由哪个角色扮演?您是否在POSIX系统上,可以在系统调用中调用
ìconf
chardet
?为什么首先要使用GNU倍频程?正确的XLS文件是一个不会显示奇怪字符的XLS文件。我使用Octave生成描述性统计数据,并将汇总数据导出到Excel。我正在使用Windows,但脚本可能由其他操作系统上的人执行。我在Windows上的
系统
调用中找到了一种使用
文件
工具的方法,但我想知道正确的、纯八度的方法。