как декодировать / получить кодировку файла (файл рабочего стола Power BI)

У меня есть внутренний файл отчета Power BI (pbix) (DataMashup), который я пытаюсь декодировать. Моя цель - создать настольный отчет Power-BI, модель данных с использованием любого языка программирования. Я использую Java для начального.

введите здесь описание изображения

файлы закодированы с использованием некоторой техники кодирования.

Я попытался получить кодировку файла, и он возвращает окна 1254. но декодирования не происходит.

File f = new File("example.txt");

    String[] charsetsToBeTested = {"UTF-8", "windows-1254", "ISO-8859-7"};

    CharsetDetector cd = new CharsetDetector();
    Charset charset = cd.detectCharset(f, charsetsToBeTested);

    if (charset != null) {
        try {
            InputStreamReader reader = new InputStreamReader(new FileInputStream(f), charset);
            int c = 0;
            while ((c = reader.read()) != -1) {
                System.out.print((char)c);
            }
            reader.close();
        } catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
        }catch(IOException ioe){
            ioe.printStackTrace();
        }

    }else{
        System.out.println("Unrecognized charset.");
    }

Распаковка файла тоже не работает

public void unZipIt(String zipFile, String outputFolder)
{
    byte buffer[] = new byte[1024];
    try
    {
        File folder = new File(outputFolder);
        if(!folder.exists())
        {
            folder.mkdir();
        }
        ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
        System.out.println(zis);

        System.out.println(zis.getNextEntry());
        for(ZipEntry ze = zis.getNextEntry(); ze != null; ze = zis.getNextEntry())
        {
            String fileName = ze.getName();
            System.out.println(ze);
            File newFile = new File((new StringBuilder(String.valueOf(outputFolder))).append(File.separator).append(fileName).toString());
            System.out.println((new StringBuilder("file unzip : ")).append(newFile.getAbsoluteFile()).toString());
            (new File(newFile.getParent())).mkdirs();
            FileOutputStream fos = new FileOutputStream(newFile);
            int len;
            while((len = zis.read(buffer)) > 0) 
            {
                fos.write(buffer, 0, len);
            }
            fos.close();
        }

        zis.closeEntry();
        zis.close();
        System.out.println("Done");
    }
    catch(IOException ex)
    {
        ex.printStackTrace();
    }
}

person Rahul Patel    schedule 01.03.2018    source источник


Ответы (2)


Файл содержит двоичный заголовок, а затем XML с указанным UTF-8. Кажется, что данные заголовка содержат имя файла (Config / Package.xml), поэтому, если предположить, что формат zip понятен. В формате zip в конце файла также будут двоичные данные.

Возможно, файл был загружен с использованием FTP, и было выполнено преобразование текста («\ n» в «\ r \ n»). Тогда почтовый индекс будет поврежден. Переименование файла в .zip может помочь протестировать файл с помощью инструментов zip.

Сначала попробуйте формат .tar. Это было бы логично, поскольку файл XML не сжат. Добавьте .tar в конец файла.

В противном случае, если содержимое всегда является UTF-8 XML:

Path f = Paths.get("example.txt");
String start ="<?xml";
String end = ">";
byte[] bytes = Files.readAllBytes(f);
String s = new String(bytes, StandardCharsets.ISO_8859_1); // Single byte encoding.
int startI = s.indexOf(start);
int endI = s.lastIndexOf(end) + end.length();
//bytes = Arrays.copyOfRange(bytes, startI, endI);
String xml = new String(bytes, startI, endI - startI, StandardCharsets.UTF_8);
person Joop Eggen    schedule 01.03.2018
comment
У этого файла нет расширения, я могу распаковать с помощью программы 7z, но не с помощью winrar. Я не могу снова заархивировать его после изменения файла, и после распаковки этого файла я получаю папку Config, папку Formula и один файл xml. Содержание всех субфайлов разное. - person Rahul Patel; 01.03.2018
comment
Если я внесу какие-либо изменения в xml файла DataMashup и создам упакованный файл отчета power bi (pbix), он выдаст ошибку, сообщающую, что файл поврежден. - person Rahul Patel; 01.03.2018

Вы можете использовать библиотеку System.IO.Packaging для извлечения мэшапа данных Power BI. Он использует стандарт пакета OPC, см. здесь.

person totoro_dev    schedule 20.07.2020