在Pascal中使用单位Crt时,无法更改控制台CP

时间:2017-05-22 07:33:24

标签: pascal lazarus freepascal

我通过Pascal创建了一个简单的程序,将unicode字符串显示到控制台屏幕。

我使用 SetConsoleOutputCP(CP_UTF8)并且它正常工作。

但是当我将CRT单元添加到我的程序时,它有一个问题:控制台代码页无法更改。

我尝试使用

Swapvectors;
Exec('Cmd','/c chcp 65001');
Swapvectors;

{$Codepage UTF8}

但它也有错误。请给我一个解决这个问题的方法。感谢。

(我正在使用Lazarus IDE)

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:4)

简单的答案是:你不能。

Unit Crt是一个旧的DOS残余,是在多字节字符集或UTF-8之前发明的。手册的介绍页面说明如下:

  

CRT单元来自TP / Dos区域。它设计用于单字节字符集,其中1个字符= 1个字节。这意味着宽字符串或 UTF-8编码(ansi)字符串将无法正常工作。

(突出我的)