- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑这个程序:
{$APPTYPE CONSOLE}
begin
Writeln('АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ');
end.
我的控制台上使用 Consolas 字体的输出是:
????????Z??????????????????????????????????????
The Windows console is quite capable of supporting Unicode as evidenced by this program:
{$APPTYPE CONSOLE}
uses
Winapi.Windows;
const
Text = 'АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ';
var
NumWritten: DWORD;
begin
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), PChar(Text), Length(Text), NumWritten, nil);
end.
输出为:
АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ
可以说服 Writeln
尊重 Unicode,还是它天生就有缺陷?
最佳答案
只需通过代码页 cp_UTF8
的 SetConsoleOutputCP()
例程设置控制台输出代码页。
program Project1;
{$APPTYPE CONSOLE}
uses
System.SysUtils,Windows;
Const
Text = 'АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ';
VAR
NumWritten: DWORD;
begin
ReadLn; // Make sure Consolas font is selected
try
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), PChar(Text), Length(Text), NumWritten, nil);
SetConsoleOutputCP(CP_UTF8);
WriteLn;
WriteLn('АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
ReadLn;
end.
输出:
АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ
АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ
WriteLn()
在内部将 Unicode UTF16 字符串转换为选定的输出代码页 (cp_UTF8)。
更新:
以上适用于 Delphi-XE2 及更高版本。在 Delphi-XE 中,您需要显式转换为 UTF-8 才能使其正常工作。
WriteLn(UTF8String('АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ'));
附录:
如果在调用 SetConsoleOutputCP(cp_UTF8)
之前在另一个代码页中完成对控制台的输出,操作系统将无法在 utf-8
中正确输出文本。这可以通过关闭/重新打开标准输出处理程序来解决。
另一种选择是为 utf-8
声明一个新的文本输出处理程序。
var
toutUTF8: TextFile;
...
SetConsoleOutputCP(CP_UTF8);
AssignFile(toutUTF8,'',cp_UTF8); // Works in XE2 and above
Rewrite(toutUTF8);
WriteLn(toutUTF8,'АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ');
关于windows - Writeln 是否能够支持 Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26255148/
我是 D 的新手,我只是在尝试。我正在使用的一本书给了我一个通用二进制搜索方法的例子。然后我想制作我自己的主要方法来打印结果只是为了好玩。我来自 Java,其中字符串连接只是使用 + 运算符完成的。
自恐龙时代以来,Turbo Pascal 和现在的 Delphi 都有 Write() 和 WriteLn() 过程,可以悄悄地做一些巧妙的事情。 参数数量可变; 每个变量可以是各种类型;您可以提供整
使用 writef() ,我可以控制一个浮点数的输出精度,例如: writef( "%20.15dr\n", 1.0 / 3.0 ); // 0.333333333333333 但如果我使用
D 版的 Hello World 如下所示: import std.stdio; void main(string[] args) { writeln("Hello World, Reload
我有以下代码(RAD Studio XE2,Windows 7 x64): program letters; {$APPTYPE CONSOLE} {$DEFINE BOO} const ENGL
我正在尝试为一周中的几天创建自定义数据类型,但我无法让它写入。编译器错误如下: [Error] hours.dpr(28): Illegal type in Write/Writeln stateme
我有以下代码(RAD Studio XE2,Windows 7 x64): program letters; {$APPTYPE CONSOLE} {$DEFINE BOO} const ENGL
我在 Ubuntu 13.04 64 位上使用 DMD64 D 编译器 v2.063.2。 我写了一个类如下: class FixedList(T){ // list private
当我想用这种语法编写 html 文档时,我在控制台中收到错误消息: doc.writeln (" $e.html($(e).html().split(text).join('' + text + '
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
// 在上面的代码中,如果引用 The writeln() method is identical to the write() method, with the addition of
用下面一行代码: document.writeln("blahblahblah") 我希望内容单独占一行,但内容被插入,但没有换行。只有一个空间。 这是预期的吗? 最佳答案 新行将仅显示在代码输出标签
考虑这个程序: {$APPTYPE CONSOLE} begin Writeln('АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ'); end.
我只是在写一些简单的代码,我注意到使用 document.writeln 不会写入新行,请允许我演示... // this is my JSON object var myObject = {
如何使用 writeln 在 Pascal 中打印撇号符号功能? 例子: writeln('My brother's book'); 无法工作,因为 s book没有“写”函数,所以编译器返回一个错误
晚安,我在 Embarcadero 10.2 上遇到 writeln 问题,我正在尝试将 sin() 函数编写为泰勒展开式无限系列。 一切都运行良好,但输出在科学表达式中,如:3.6044848692
对于较新的 Delphi 版本,支持 OSX 和 Android,是否有一种独立于平台的方法来检测 Writeln至 Output可以安全使用吗? 输出文档包含一条注释 Most processes
我在 Firefox 版本 27.0.1 上遇到此问题 当我使用 document.writeln('whatever'); 我无法使用简单的 setTimeout 函数,甚至无法使用警报。 我可以在
这是一个演示我的问题的小工具:http://plnkr.co/edit/322WB4jyCJberABbb0P0 我正在针对不同的问题进行一些测试,并且遇到了一些意外的行为。 var A = func
问候, 下面的代码适用于alert,但不适用于document.writeln。是因为onload事件吗?如果是这样,浏览器在完成加载后是否应该能够添加更多元素? - 尝试了解它是如何工作的(同时我正
我是一名优秀的程序员,十分优秀!