Как использовать Perl для обработки файла, формат которого похож на Unicode?

У меня есть устаревшая программа, и после ее запуска он создаст файл журнала. Теперь мне нужно проанализировать этот файл журнала.

Но формат файла очень странный. Пожалуйста, посмотрите следующее: я использовал vi, чтобы открыть его, он выглядит как файл Unicode, но не запускается FFFE. после того, как я использовал блокнот, откройте его, сохраните и снова откройте, я обнаружил, что FFFE добавляется блокнотом. Затем я могу использовать команду 'type log.txt> log1.txt "для преобразования всего файла в формат ANSI. Позже в perl я могу использовать / TDD / в perl для поиска того, что мне нужно.

Но теперь я могу Я не имею дело с этим форматом файла.

Мы будем очень благодарны за любые комментарии или идеи.

0000000: 5400 4400 4400 3e00 2000 4c00 6f00 6100  T.D.D.>. .L.o.a.

После сохранения в блокноте

0000000: fffe 5400 4400 4400 3e00 2000 4c00 6f00  ..T.D.D.>. .L.o.

open STDIN, "< log.txt";
while(<>)
{
  if (/TDD/)
  {
    # Add my logic.
  }
}

Я прочитал цепочку сообщений, которая очень полезна, но все еще не могу решить свою проблему. он выглядит как файл Юникода, но это не FFFE. после того, как я использовал блокнот, откройте его, сохраните и снова откройте, я обнаружил, что FFFE добавляется блокнотом. Затем я могу использовать команду 'type log.txt> log1.txt "для преобразования всего файла в формат ANSI. Позже в perl я могу использовать / TDD / в perl для поиска того, что мне нужно.

Но теперь я могу не имеет дело с этим форматом файла.

Мы будем очень благодарны за любые комментарии или идеи.

0000000: 5400 4400 4400 3e00 2000 4c00 6f00 6100  T.D.D.>. .L.o.a.

После сохранения в блокноте

0000000: fffe 5400 4400 4400 3e00 2000 4c00 6f00  ..T.D.D.>. .L.o.

open STDIN, "< log.txt";
while(<>)
{
  if (/TDD/)
  {
    # Add my logic.
  }
}

Я прочитал цепочку сообщений, которая очень полезна, но все еще не могу решить свою проблему. он выглядит как файл Unicode, но это не FFFE. после того, как я использовал блокнот, откройте его, сохраните и снова откройте, я обнаружил, что FFFE добавляется блокнотом. Затем я могу использовать команду 'type log.txt> log1.txt "для преобразования всего файла в формат ANSI. Позже в perl я могу использовать / TDD / в perl для поиска того, что мне нужно.

Но теперь я могу не имеет дело с этим форматом файла.

Мы будем очень благодарны за любые комментарии или идеи.

0000000: 5400 4400 4400 3e00 2000 4c00 6f00 6100  T.D.D.>. .L.o.a.

После сохранения в блокноте

0000000: fffe 5400 4400 4400 3e00 2000 4c00 6f00  ..T.D.D.>. .L.o.

open STDIN, "< log.txt";
while(<>)
{
  if (/TDD/)
  {
    # Add my logic.
  }
}

Я прочитал цепочку сообщений, которая очень полезна, но все еще не могу решить свою проблему.

Но сейчас я не могу разобраться с этим форматом файла.

Мы будем очень признательны за любые комментарии или идеи.

0000000: 5400 4400 4400 3e00 2000 4c00 6f00 6100  T.D.D.>. .L.o.a.

После сохранения в блокноте

0000000: fffe 5400 4400 4400 3e00 2000 4c00 6f00  ..T.D.D.>. .L.o.

open STDIN, "< log.txt";
while(<>)
{
  if (/TDD/)
  {
    # Add my logic.
  }
}

Я прочитал ветку, которая очень полезна, но все еще не могу решить мою проблему.

Но сейчас я не могу разобраться с этим форматом файла.

Мы будем очень признательны за любые комментарии или идеи.

0000000: 5400 4400 4400 3e00 2000 4c00 6f00 6100  T.D.D.>. .L.o.a.

После сохранения в блокноте

0000000: fffe 5400 4400 4400 3e00 2000 4c00 6f00  ..T.D.D.>. .L.o.

open STDIN, "< log.txt";
while(<>)
{
  if (/TDD/)
  {
    # Add my logic.
  }
}

Я прочитал ветку, которая очень полезна, но все еще не могу решить мою проблему. How can I open a Unicode file with Perl?

I can't add answer, so I edit my thread.

Thanks Michael, I tried your script but got the following error. I checked my perl version is 5.1, OS is windows 2008.

* ascii
* ascii-ctrl
* iso-8859-1
* null
* utf-8-strict
* utf8
UTF-16:Unrecognised BOM 5400 at test.pl line 12.

Update

I tried the UTF-16LE with the command:

perl.exe open.pl utf-16le utf-16 .txt

but I still got the error like

UTF-16LE:Partial character at open.pl line 18, <$fh> line 1824.

also, I tried utf-16be, got the same error.

If I used utf-16, I will got the error

UTF-16:Unrecognised BOM 5400 at open.pl line 18.

open.pl line 18

is "print while <$fh>;"

Any idea?

Updated: 5/11/2011. Thank you guys for your help. I resolved the problem. Я обнаружил, что данные в файле журнала все-таки не UTF-16. Итак, мне пришлось написать проект .net с помощью Visual Studio. Он будет читать файл журнала с UTF-16 и записывать в новый файл с UTF-8. Затем я использовал сценарий Perl для анализа файла и генерации данных результата. Теперь это сработало.

Итак, если кто-то из вас знает, как использовать perl для чтения файла с большим количеством мусорных данных, пожалуйста, скажите мне, большое спасибо.

например, образец данных мусора

tests.cpp:34)
਍吀䐀䐀㸀 䰀漀愀搀椀渀最 挀挀洀挀漀爀攀⸀搀氀

используйте шестнадцатеричный ридер, чтобы открыть его:

0000070: a88d e590 80e4 9080 e490 80e3 b880 e280  ................
0000080: 80e4 b080 e6bc 80e6 8480 e690 80e6 a480  ................
0000090: e6b8 80e6 9c80 e280 80e6 8c80 e68c 80e6  ................
00000a0: b480 e68c 80e6 bc80 e788 80e6 9480 e2b8  ................

6
задан Community 23 May 2017 в 11:50
поделиться