А у вас это действительно unicode?!!
Да:
- Код: Выделить всё
- C:\data\temp\unicode.txt
 0000000000: D0 AE D0 BD D0 B8 D0 BA │ D0 BE D0 B4 20 22 D0 AE  Ю›н›и›к›о›д› "Ю›
 0000000010: D0 AE D0 AE D0 AE D0 AE │ D0 AE D0 AE D0 AE D0 9D  Ю›Ю›Ю›Ю›Ю›Ю›Ю›Н›
 0000000020: D0 98 D0 98 D0 98 D0 98 │ D0 98 D0 98 D0 98 D0 98  И›И›И›И›И›И›И›И›
 0000000030: D0 98 D0 98 D0 98 D0 98 │ D0 98 D0 98 D0 9A D0 9E  И›И›И›И›И›И›К›О›
 0000000040: D0 9E D0 9E D0 9E D0 9E │ D0 94 21 21 21 22 20 D0  О›О›О›О›Д›!!!" Ю
 0000000050: AE D0 BD D0 B8 D0 BA D0 │ BE D0 B4 0D 0A 22 C2 AB  ›н›и›к›о›д›♪◙"«›
 0000000060: 49 20 6C 6F 76 65 20 75 │ 6E 69 63 6F 64 65 C2 BB  I love unicode»›
 0000000070: 20 E2 80 94 20 D0 B3 D0 │ BE D0 B2 D0 BE D1 80 D0   —›› г›о›в›о›р›и
 0000000080: B8 D1 82 20 D0 BD D0 B0 │ D0 BC 20 D0 9A D1 80 D0  ›т› н›а›м› К›р›о
 0000000090: BE D0 BB D0 B8 D0 BA 22 │ 0D 0A 22 D0 A2 D1 80 D0  ›л›и›к›"♪◙"Т›р›и
 00000000A0: B8 22 20 22 D1 8E D0 BD │ D0 B8 D0 BA D0 BE D0 B4  ›" "ю›н›и›к›о›д›
 00000000B0: D0 BD D1 8B D1 85 20 D1 │ 86 D0 B8 D1 82 D0 B0 D1  н›ы›х› ц›и›т›а›т
 00000000C0: 82 D1 8B 22 20 22 D0 B2 │ 20 D0 BE D0 B4 D0 BD D0  ›ы›" "в› о›д›н›о
 00000000D0: BE D0 B9 20 D1 81 D1 82 │ D1 80 D0 BE D0 BA D0 B5  ›й› с›т›р›о›к›е›
 00000000E0: 22 0D 0A D0 90 20 D1 82 │ D1 83 D1 82 20 D0 BD D0  "♪◙А› т›у›т› н›и
 00000000F0: B8 D1 84 D0 B8 D0 B3 D0 │ B0 0D 0A                 ›ф›и›г›а›♪◙
а) двухбайтовая кодировка символов - которые надо сравнивать/обрабатывать и желательно не вручную
Вы хотите обрабатывать utf-8 или utf-16 файлы? Под словом «юникод» обычно подразумевают кодировку utf-8
б) перевод строк в виде "000D 000A" - который меня просто УБИВАЕТ! И который не обрабатывается нормально стандартными функциями ReadLn и WriteLn.
Это уже что-то :)
Проблема в том, что юникод — слишком обширная тема, и я не готов (да и не смогу) в коротком форумном посте рассказать все тонкости и нюансы его использования на все случаи жизни.
Конкретно под данную задачу программу можно написать так:
- Код: Выделить всё
- {$MODE OBJFPC}
 {$H+}
 {$PACKENUM 1}
 {$codepage UTF8}
 
 {$IFNDEF windows} // Ну а вдруг?
 uses
 cwstring;
 {$ENDIF}
 
 var
 Line: UnicodeString;
 C: UnicodeChar;
 Mode: Boolean;
 
 begin
 if ParamStr(1) <> '' then begin
 Assign(input, ParamStr(1));
 Reset(input);
 end;
 if ParamStr(2) <> '' then begin
 Assign(output, ParamStr(2));
 Rewrite(output);
 end;
 while not Eof do begin
 Readln(Line);
 Mode := False;
 for C in Line do
 if C <> '"' then begin
 if Mode then begin
 Write(C);
 end;
 end else
 Mode := not Mode;
 Writeln(' END_OF_LINE_MARKER'); // просто для проверки, что две строки файла не прочлись как одна
 end;
 end.
Я специально подготовил входной файл со всеми тремя основными типами концов строк
- Код: Выделить всё
- "ЮНИКОД!"
 "Кролик!"
 "АЗАЗИЙ"
 "«»—" "и т.д" "и т.п."
и его концы строк выровнены в дампе по правому краю для того, чтобы их было проще увидеть:
- Код: Выделить всё
- C:\data\temp\unicode.txt
 0000000000: 22 D0 AE D0 9D D0 98 D0 │ 9A D0 9E D0 94 21 22 0D  "Ю›Н›И›К›О›Д›!"♪
 0000000010: 22 D0 9A D1 80 D0 BE D0 │ BB D0 B8 D0 BA 21 22 0A  "К›р›о›л›и›к›!"◙
 0000000020: 22 D0 90 D0 97 D0 90 D0 │ 97 D0 98 D0 99 22 0D 0A  "А›З›А›З›И›Й›"♪◙
 0000000030: 22 C2 AB C2 BB E2 80 94 │ 22 20 22 D0 B8 20 D1 82  "«›»›—››" "и› т›
 0000000040: 2E D0 B4 22 20 22 D0 B8 │ 20 D1 82 2E D0 BF 2E 22  .д›" "и› т›.п›."
 0000000050: 0A                      │                          ◙
Запуск программы на данном файле:
- Код: Выделить всё
- C:\data\temp> fpc -gl q.pas && rm -f unicode.out && q.exe unicode.txt unicode.out && type unicode.out
 Free Pascal Compiler version 3.0.0rc1 [2015/08/10] for i386
 Copyright (c) 1993-2015 by Florian Klaempfl and others
 Target OS: Win32 for i386
 Compiling q.pas
 Linking q.exe
 37 lines compiled, 0.2 sec, 36416 bytes code, 1316 bytes data
 ЮНИКОД! END_OF_LINE_MARKER
 Кролик! END_OF_LINE_MARKER
 АЗАЗИЙ END_OF_LINE_MARKER
 «»—и т.ди т.п. END_OF_LINE_MARKER