$dumpPath = "C:\Temp\TELEGRAM.dmp"
$outputPath = "C:\Temp\dump_readable.txt"
$fileStream = [System.IO.File]::OpenRead($dumpPath)
$outStream = [System.IO.StreamWriter]::new($outputPath, $false, [System.Text.Encoding]::UTF8)
$chunkSize = 50MB
$buffer = New-Object byte[] $chunkSize
# Фильтр: оставляет ТОЛЬКО кириллицу (\u0400-\u04FF), латиницу (\u0020-\u007E) и переносы строк
$regex = [System.Text.RegularExpressions.Regex]::new('[\u0400-\u04FF\u0020-\u007E\r\n]{4,}')
while (($bytesRead = $fileStream.Read($buffer, 0, $chunkSize)) -gt 0) {
# Чтение с прямого смещения (четные байты)
$textEven = [System.Text.Encoding]::Unicode.GetString($buffer, 0, $bytesRead)
foreach ($m in $regex.Matches($textEven)) {
$outStream.WriteLine($m.Value)
}
# Чтение со смещения в 1 байт (на случай сдвига UTF-16LE в ОЗУ)
if ($bytesRead -gt 1) {
$textOdd = [System.Text.Encoding]::Unicode.GetString($buffer, 1, $bytesRead - 1)
foreach ($m in $regex.Matches($textOdd)) {
$outStream.WriteLine($m.Value)
}
}
}
$fileStream.Close()
$outStream.Close()
Write-Host "Готово! Весь читаемый текст без мусора сохранён в $outputPath" -ForegroundColor Green