*исправления по считыванию данных без BOM

*добавлены работающие тесты
This commit is contained in:
K1ndWha1e committed 2026-09-29 23:26:34 +03:00
1 parent d03f6214aa
commit aa04fd4df0
11 files changed
+191 -55

No files matched your search

+12 -3
View File
@@ -54,10 +54,19 @@ fn (mut frame Frame) fill(bytes []u8, start_position u64, idv3_version u8) {
// Фрейм целиком вместе с заголовком, чтобы записать его обратно без изменений
frame.apic = bytes[frame.start..frame.end]
} else {
// Выбор шага в записимости от версии ID3
stride := if idv3_version == 3 { 13 } else { 11 }
// Данные начинаются после 10 байт заголовка и байта кодировки
mut data_start := frame.start + 11
// UTF-16 с BOM (01): 2 байта маркера, по ним определяется порядок байт
if frame.encoding_name_idx == 1 && data_start + 2 <= frame.end {
if bytes[data_start] == 0xFE && bytes[data_start + 1] == 0xFF {
frame.encoding_name = "UTF-16BE"
}
data_start += 2
}
// Замыкающие нули не относятся к данным
frame.data = (iconv.encoding_to_vstring(bytes[frame.start+u64(stride)..frame.end], frame.encoding_name) or { "" }).trim_right('\x00')
frame.data = (iconv.encoding_to_vstring(bytes[data_start..frame.end], frame.encoding_name) or { "" }).trim_right('\x00')
frame.addition = bytes[frame.start..frame.start + 10]
}