У меня консольное приложение. написанный в Delphi 2010. Он выводит поддержку Unicode. (Для этого я использовал UTF8Encode и SetConsoleOutputCP (CP_UTF8)). Когда я запускаю программу из командной строки, она работает нормально.
Теперь я хочу прочитать результат из другой программы, которая была создана в Delphi 5. Я использую метод this. Но у меня проблемы с символами юникода.
У кого-нибудь есть рекомендация прочитать вывод юникода консольного приложения. от Delphi 5?чтение unicode вывода консольного приложения
ответ
Я изменил Somethings следующим образом, и это работает прекрасно:
В консольном приложении, я не использовал SetConsoleOutputCP (CP_UTF8). использовать строку вывода ...
А в другой программе (Delphi 5), я использую this функцию без использования OemToChar (Buffer, буфер)
-1, Вопрос задает вопрос о том, как читать данные Unicode с помощью D5. Этот ответ вовсе не связан с unicode. –
У вас есть две проблемы с использованием Delphi 5 с выходом unicode.
Первое, что TMemo не поддерживает символы Юникода, вам нужно будет найти другой элемент управления, например, в TMS Unicode Component Pack. Тем не менее, этот компонент пакета не поддерживает Delphi 5.
Вторая проблема заключается в этой части кода:
repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],
ReadBuffer,BytesRead,nil) ;
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer) ;
AMemo.Text := AMemo.text + String(Buffer) ;
until (BytesRead < ReadBuffer) ;
Он читает ситемы символов и размещение их в буфер, который является PChar (один символ за байт в D5) Затем введите листинг этой строки в строку, которая является AnsiString в D5.
Хотя я не использовал D5 в течение многих лет, единственным типом, который я могу запомнить, который может обрабатывать данные Unicode в D5, является WideString.
Я все еще работаю с D5 вкл./Выкл. Он действительно поддерживает WideString/Unicode. Тем не менее, WideStrings кодируются UTF-16, UTF-16-LE - более точно. Не нашли родной поддержки UTF-8 в D5. Поиск справки D5 ничего не вызывает и не ведет поиск источников D5. –
@Marjan: конвертация UTF-16-LE в UTF-8 и наоборот - не проблема, даже если она не является частью D5 RTL.Источники dxgettext, например, имеют подпрограммы UTF-8, работающие с D5. – mghie
Delphi 5 имеет поддержку Unicode, но только через WideStrings, кодированные UTF-16 (-LE). На самом деле, D5 не поддерживает UTF-8.
Вы можете прочитать вывод своего консольного приложения D2010 так, как вы уже это сделали, хотя я бы взял преобразование OemToAnsi. OEMToAnsi был заменен (даже в D5 днях) OEMToChar, который может использоваться для преобразования символов OEM в Ansi (одиночные байтовые символы с использованием различных кодовых страниц) или WideString (UTF-16-LE Unicode), но он ничего не сделает для интерпретировать входящие байты UTF-8 и могут просто испортить вещи.
Что вам нужно, это набор функций, которые могут принимать все «необработанные» utf-8 байты, которые вы прочитали из канала, и преобразовать их в кодировку (UTF-16-LE) WideStrings, которую вы можете который может принимать и показывать WideStrings. В качестве альтернативы вы можете искать элемент управления, который выполняет «сырую» интерпретацию и преобразование байтов сам по себе, но я должен признать, что я не видел никого, кто не поддерживает D5.
библиотека, которая может конвертировать множество различных кодировок и до сих пор поддерживает D5 является DIUnicode: http://www.wikitaxi.org/delphi/doku.php/products/unicode/index
- 1. CMD Чтение C# консольного приложения
- 2. Чтение вывода приложения
- 3. Перенаправление стандартного вывода консольного приложения
- 4. Чтение консольного вывода процесса через SSH, linux
- 5. Захват вывода консольного приложения в визуальной студии
- 6. cmd пакет для прослушивания вывода консольного приложения
- 7. консольного приложения
- 8. Чтение Unicode с Console.ReadKey
- 9. Форматирование простого консольного вывода
- 10. Чтение консольного вывода в реальном времени в lua
- 11. Текст ввода и вывода из долгого консольного приложения (C++)
- 12. Чтение с консольного процесса
- 13. Тестирование консольного консольного приложения в C#
- 14. чтение unicode
- 15. Просмотр консольного вывода из TVJS
- 16. Использование Process.Start захватить консольного вывода
- 17. Выемка только часть консольного вывода
- 18. C# Запуск внешнего консольного приложения и отсутствие вывода?
- 19. Наличие вывода консольного приложения в Visual Studio вместо консоли
- 20. Отладка чтения вывода консольного приложения Windows с использованием Python
- 21. Преобразование вывода json консольного приложения в объект PowerShell
- 22. Чтение XML-файла с веб-сайта с помощью консольного приложения
- 23. Чтение вывода jsp-страницы из моего приложения
- 24. Чтение стандартного (консольного) ввода из файла и вывода вывода в другой файл
- 25. Передача аргументов консольного приложения
- 26. консольного приложения вопрос
- 27. MSTest внутри консольного приложения
- 28. Как самоубийство консольного приложения?
- 29. Создание невидимого консольного приложения
- 30. консольного приложения C++
В этом вопросе есть только кажется, буфер: PChar, который должен быть буфер: pansichar. В остальном я не понимаю, в чем проблема, не могли бы вы подробнее рассказать о том, что у вас есть? –