向量 `file` 源保留 BOM 为 U+FEFF 字符以及每行尾部的 CRLF CR
** 变量版本:** 0.58.0
** 严重性:** 少校(每行中数据腐败,而不仅仅是标题)
** 说明:**
向量“ 文件”来源使用“ 线- 界限 ” (默认 ` ) "'),但不从任何一行剥去UTF-8 BOM或跟随CR. 错误会影响文件中的"EveryY"行,而不仅仅是第一个.
** 来源代码(确认):** “lib/file-source/src/file watcher/mod.rs:247”:
匹配读取到 max 大小 ()
读取器.as mut(,),
文件位置( P),
自动. line deliber.as ref (),
自行移动( M) 。 b,
自行.max 行 字节,
。a 等待着
`界线'逐字通过。 没有BOM剥取. 没有CR剥取。 线边界(或文件边界,为一行)之间的完整字节成为生线.
** 复制(Vector 0.58.0,与 BOM + 5 CRLF 线一起存档):**
文件字节 :
EF BB BF 行0 col1<TAB>行0 col2<CR><LF>
行 1 col1<TAB>行1 col2<CR><LF>
线条 col1 < TAB> 线条2 col2<CR><LF>
行3 col1<TAB>行3 col2<CR><LF>
线条4 col1<TAB>线条4 col2<CR><LF>
矢量输出( 5个事件) :
- 第0行:msg长度为25,以U+FEFF(BOM)开头,以CR结尾
- 第1行:Msg长度22,无BOM,以CR结尾
- 第2行:Msg长度22,无BOM,以CR结尾
- 第3行:Msg长度22,无BOM,以CR结尾
- 第4行:Msg长22,无BOM,以CR结尾
意见:
- 第一行搭载了3字节的UTF-8 BOM("U+FEFF",显示为"零宽空"),在VRL字符串中成为了字面字符.
- 每一行(不仅仅是第一行)在数据之后都带有一条后行 " r " 。
- 如果下游的分解在白空间上或使用正则克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克
** 核查:**
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
用 BOM + CRLF 创建测试文件 :
打印'\ xEF\ xBBF line1\tcol2\r\ndata1\tcol2\r\n' > /tmp/bom- test.tsv
以简单的回图运行矢量:
猫 > /tmp/cfg.yaml “EOF ”
来源 :
弧 :
类型: 文件
包括:[/tmp/bom-test.tsv]
数据 dir: /tmp/vdata
从 : 开始
忽略检查点: 真
变换 :
解析 :
类型:重映射
输入 : [弧
来源:
.msg = 字符串! (.message) (中文(简体) ).
. has bom = start with (.msg, "\\u{FEFF}")
汇 :
输出 :
类型: 文件
输入: [页]
路径 :/tmp/out.jsonl
编码 : {编码: json}
欧法尔
向量 -- -- 配置/tmp/cfg.yaml
预期输出:. has bom对1号线是真实的,对2号线是虚假的
** 影响:**
1. CRLF文件的每行末都带有隐形CR. 使用 " [^\t]*美元 " 等正电子管与上一栏不符。
2. 第1行载有3个隐形BOM字节. 下游剖析器(JSON Lines, CSV 读取器)参见被腐蚀的第一列.
3. 使用 VRL 字符串操作的计量和标签中包含 Q`\r"和 `\\\\u{FEFF}` 字符.
4. 常见于混合OS部署中,上游Linux文件在到达矢量之前通过Windows工具(Excel,Notepad)发送.
** 预期行为:**
默认行为应该可以配置. 两种合理的选择:
- 把BOM从一行脱出, 脱出CR从所有
. . . . . . .
内容来源: vectordotdev/vector