我有控制台应用程序。用Delphi 2010编写。它的输出是Unicode支持的。 (我为此使用了UTF8Encode和SetConsoleOutputCP(CP_UTF8))。当我从命令提示符运行程序时,它工作正常。
现在我想读取其他程序的输出,这是在Delphi 5中创建的。我用this的方法。但我有unicode字符的问题。
有没有人有建议阅读控制台应用程序的unicode输出。从Delphi 5开始?阅读控制台应用程序的unicode输出
回答
我已经改变了出头如下工作得很好:
在控制台应用程序,我没有使用SetConsoleOutputCP(CP_UTF8 )。仅使用字符串输出...
,并在其他程序(Delphi 5中),我用不使用OemToChar(缓冲区,缓冲区)this功能
-1,该问题询问如何使用D5读取unicode数据。这个答案根本不涉及unicode。 – 2010-07-13 08:52:02
使用Delphi 5和unicode输出有两个问题。
第一个是TMemo不支持Unicode字符,您将需要找到另一个控件,例如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中的每个字节)然后键入将其转换为D5中的AnsiString字符串。
尽管多年来我没有使用过D5,但我能记住的唯一可以处理D5中的unicode数据的类型是WideString。
我仍然使用D5开启和关闭。它确实有WideString/Unicode支持。但是,WideStrings是UTF-16编码,UTF-16-LE更精确。在D5中没有找到任何原生UTF-8支持。搜索D5帮助不会产生任何东西,也不会搜索D5源。 – 2010-05-18 18:10:00
@Marjan:UTF-16-LE转换为UTF-8,反之亦然,即使它不是D5 RTL的一部分也不是什么大问题。例如,dxgettext源具有与D5一起使用的UTF-8例程。 – mghie 2010-05-18 20:20:32
德尔福5确实有unicode支持,但只能通过UTF-16(-LE)编码的WideStrings。本质上,D5没有UTF-8支持。
虽然我会取出OemToAnsi转换,但您可以按照您已经做的方式读取D2010控制台应用程序的输出。 OEMToAnsi被OEMToChar所取代(即使在D5天),可用于将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. 阅读等过程控制台输出
- 2. 请参阅VSTO控制台输出而不使用控制台应用程序
- 3. 将C#控制台应用程序设置为Unicode输出
- 4. 从控制台程序读取输出
- 5. 控制台应用程序输出
- 6. Win32应用程序控制台输出?
- 7. Java中的控制台应用程序中的Unicode输入
- 8. 从wmic控制台应用程序中读取输出
- 9. qDebug Qt控制台应用程序输出到Qt Creator应用程序输出
- 10. .NET 2.0控制台应用程序 - 阅读应用程序设置
- 11. 阅读控制台输出写出错误日志VB
- 12. 使用Python调试Windows控制台应用程序的输出读数
- 13. 启用控制台应用程序的输出到脚本
- 14. 控制台应用程序:打印到控制台溢出
- 15. Jenkins的.NET应用程序的控制台输出在哪里?
- 16. 如何阅读量角器中的控制台日志输出?
- 17. Qt GUI应用程序中的控制台输出?
- 18. 如何访问nwjs应用程序的控制台输出?
- 19. 在Visual Studio中捕获控制台应用程序的输出
- 20. Visual Studio中Web应用程序的控制台输出
- 21. 禁止子控制台输出(Tkinter的)应用程序
- 22. 控制台和Web应用程序的输出进度
- 23. Java:NoSuchElementException当阅读控制台
- 24. 使用C++从控制台应用程序收集stdout输出
- 25. 在C++控制台应用程序中使用Unicode字体
- 26. 控制台应用程序不会定期刷新输出
- 27. 控制台重定向输出到另一个应用程序
- 28. powershell和控制台应用程序输出
- 29. 试图阅读控制台应用程序的某些命令行参数
- 30. 读控制台处理输出
在这个问题似乎有一个缓冲:PChar类型应该是缓冲区:pansichar。其余的,我不明白具体的问题是什么,你能详细说明你有什么吗? – 2010-05-18 13:05:54