- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 Perl 和模块 Text::CSV
从 CSV 文件中提取文本.
每个 CSV 文件都用引号分隔每个字段。文本被保存到独立的文本文件中,用制表符分隔成列。我可以毫无问题地调用和打印文本文件中的每一列,但是当我尝试在循环中使用这些值时,出现错误 Unrecognized character\xEF
。
我的代码示例如下:
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
#### Match ligand data with GPCR interaction data ####
my $csv = Text::CSV->new();
my $file = $ARGV[0];
open (FILE, "<$file");
open (OUT, ">new_$file");
while (my $line2 = <FILE>)
{
binmode(STDOUT, ":utf8");
if ($line2 =~ /^(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)\t(.*?)$/)
{
#### Data from filtered1.txt ####
my $up_fil = $1;
my $ligid_fil = $2;
my $units_fil = $3;
my $low_fil = $4;
my $median_fil = $5;
my $upper_fil = $6;
my $ref = $7;
#### Convert negative log affinity values to normal ####
my $activity = $units_fil;
$activity =~ s/p//;
my $value;
if ($median_fil ne "")
{
$value = $median_fil;
$value = (10**-$median_fil)/(10**-9);
}
elsif ($low_fil ne "" and $upper_fil ne "")
{
my $lower = $low_fil;
$lower = (10**-$low_fil)/(10**-9);
my $upper = $upper_fil;
$upper = (10**-$upper_fil)/(10**-9);
$value = "$upper - $lower";
}
else
{
$value = "n/a";
}
#### Match entries from filtered1.txt with ligands.csv ####
open (LIG, "<ligands.csv");
while (my $line3 = <LIG>)
{
$csv->parse($line3);
my @ligand_fields = $csv->fields();
if (!$ligand_fields[14]) { next; }
if ($ligand_fields[0] eq $ligid_fil)
{
#print OUT "$ligand_fields[14]\t$ligand_fields[13]\t$up_fil\t$ligid_fil\t$activity\t$value\t$ref\n";
print "$ligand_fields[14]\t$ligand_fields[13]\t$up_fil\t$ligid_fil\t$activity\t$value\t$ref\n";
next;
}
}
close LIG;
}
}
close FILE;
close OUT;
我也尝试过按照以下方式使用正则表达式,但无济于事。
# remove BOM
${$self->{CODE}} =~ s/^(?:
\xef\xbb\xbf |
\xfe\xff |
\xff\xfe |
\x00\x00\xfe\xff |
\xff\xfe\x00\x00
)//x;
原始 CSV 文件似乎没有任何 BOM,因此我怀疑 Text::CSV
可能在解析和返回值时创建它。我希望这是对问题的足够清楚的解释,如果需要,我可以提供更多细节。在此先感谢您提供的任何建议。
最佳答案
Text::CSV
的文档声明您几乎肯定会使用二进制模式。
my $csv = Text::CSV->new ( { binary => 1 } ) # should set binary attribute.
or die "Cannot use CSV: ".Text::CSV->error_diag ();
来自 https://metacpan.org/pod/Text::CSV#SYNOPSIS .
您可能还想看看 Text::CSV::Encoded
.
我还看到您将 binmode 设置为 :utf8
在标准输出上。这有几个问题:
:utf8
binmode 没有很好的错误检查,你应该使用 :encoding(UTF-8)
相反字节 0xEF 可以出现在 UTF-8 字节序列中,但只有在非常特殊的情况下,它太高 (> 0x7F) 而不是单个字符。然而在 Perl 中 \xEF
或 \x{ef}
不是指字节 0xEF,而是 Unicode 代码点 U+00EF,它在 UTF-8 中表示为 0xC3 0xAF。您可以在 Unicode/UTF-8 字符表中看到这一点,例如 http://www.utf8-chartable.de/ .
$ perl -E 'binmode STDOUT, ":encoding(UTF-8)"; say "\xEF";'
ï
所以我认为这就是为什么您用于删除 BOM 的正则表达式不起作用的原因。
我建议使用 three argument open与 '<:encoding(UTF-8)'
或 '>:encoding(UTF-8)'
打开所有输入和输出文件,并在二进制模式下使用 Text::CSV,以获得最佳结果。
关于perl - "Unrecognized character\xEF"无 BOM 文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066648/
我试图弄清楚如何在使用 Apache 给出的示例时简单地排除 BOM。我正在从内部存储读取文件,并首先将其转换为字符串。然后我将其转换为 ByteArray,以便获得 InputStream。然后我使
我想从 Material list 中获取递归数据,但在此之前,我需要找到表之间的关系。我不知道如何获取 BOM 及其子 BOMS(基于下表)。 表格是: 零件:ID(pk)、DefaultBOMID
问题的意思差不多。我发现了很多关于如何在读入文本后去除字节顺序标记的建议,但这似乎是错误的。语言中是否没有一种标准方法可以通过正确识别和处理 BOM 来读取 Unicode 文件? 最佳答案 遇到了同
问题的意思差不多。我发现了很多关于如何在读入文本后去除字节顺序标记的建议,但这似乎是错误的。语言中是否没有一种标准方法可以通过正确识别和处理 BOM 来读取 Unicode 文件? 最佳答案 遇到了同
这里有两个问题。我有一组通常是带有 BOM 的 UTF-8 文件。我想将它们(理想情况下)转换为没有 BOM 的 UTF-8。似乎 codecs.StreamRecoder(stream, encod
首先,介绍一些背景知识:我正在使用 Python 开发 Web 应用程序。我所有的(文本)文件目前都以 UTF-8 格式存储在 BOM 中。这包括我所有的 HTML 模板和 CSS 文件。这些资源作为
我目前有一个 V2 数据工厂,它将带有 BOM 的 UTF-8 编码文件复制到存储位置,我想删除 BOM 作为标准复制事件的一部分。 有办法做到这一点吗? 最佳答案 事实证明,这实际上非常简单。在输出
Jetpack Compose版本:Compose BOM 2023.08.00。使用的Jetpack组合组件(S):基础、材质、动画、实况数据、UI工具、视图模型。Kotlin版本:1.9.10。复
我正在处理 Spring Cloud 契约(Contract)文档,我看到了来自 Spring cloud documentation 的依赖评论。并想知道这究竟是什么 最佳答案 BOM 是 的首字母
这些已经过时了吗?它们似乎是有史以来最糟糕的想法-在您的文件内容中嵌入任何人都看不到的内容,但会影响文件的功能。我不明白为什么我想要一个。 最佳答案 在某些情况下,它们是必需的,是的,因为存在UTF-
我使用的 Javascript 文件是其他 JavaScript 文件的串联。 不幸的是,将这些 JavaScript 文件连接在一起的人在读取文件时没有使用正确的编码,并允许将每个 JavaScri
假设我有一个编码: Encoding enc; 当这个编码被传递给我时,它被设置为发出一个 BOM。我对 BOM 不感兴趣。我系统中的编码是用 header 处理的。 假设编码是不可变的...我想创建
假设我有一个编码: Encoding enc; 当这个编码被传递给我时,它被设置为发出一个 BOM。我对 BOM 不感兴趣。我系统中的编码是用 header 处理的。 假设编码是不可变的...我想创建
我们是一家大公司,拥有大约 2000 个独立的 Java 项目。由于历史原因,我们没有多模块项目,但我们想介绍一下。 从逻辑上讲,我们已经有了项目“组”,即有人负责(比方说)50 个密切相关的项目。这
我在 byte[] byteArray 中有 xml 数据,它可能包含也可能不包含 BOM。 C# 中是否有任何标准方法可以从中删除 BOM?如果不是,处理所有情况(包括所有类型的编码)的最佳方法是什
废话不多说,直接上代码 ? 1
似乎在用于UTF16-LE和UTF-32LE的字节顺序标记之间存在歧义。特别是,请考虑一个包含以下8个字节的文件: FF FE 00 00 00 00 00 00 我怎么知道这个文件是否包含: UTF
有人可以告诉我如何用文件保存字节顺序标记(BOM)吗?例如,我现在保存一个文本文件,如下所示: NSString *currentFileContent = @"This is a string of
我注意到 Kubernetes 客户端的 fabric8.io 有两个以项目和 BOM 结尾的依赖项。 我注意到的唯一区别是它首先有一个分布式版本。同样根据 apache 指南,bom 通常用作项目的
我们有一个多模块项目,所有依赖版本都列在顶层 pom.xml 中。 .有什么方法可以让 Gradle 使用它,而不必将此 bom 安装到本地 maven repo 中? 更具体地说:有一个 pom.x
我是一名优秀的程序员,十分优秀!