【发布时间】:2018-03-14 17:33:47
【问题描述】:
我有 delphi 应用程序,我需要为 OS X 重写它。 此应用程序向/从 HID 设备写入/读取数据。
我在尝试从 mac 写入字符串时遇到问题。
这是我正在编写的行(来自 Windows 上的调试器):'Новый комплекс 1' 这很好用。同时,如果将其从调试器复制到某个地方,它将变为“Íîâûé êîìïëåêñ 1”。设备以西里尔字母显示它的书写方式。没关系。
当我尝试在 OS X 上重复此步骤时,设备显示无法读取的符号。但是,如果我从 Windows 示例中硬编码 'Íîâûé êîìïëåêñ 1' 就可以了。
给出一些提示。
如何在 Windows 上 一些代码:
s:= 'Новый комлекс 1'
s:= AnsiToUtf8(ReplaceNull(s));
这里是 ReplaceNULL:
function ReplaceNull(const Input: string): string;
var
Index: Integer;
Res: String;
begin
Res:= '';
for Index := 1 to Length(Input) do
begin
if Input[Index] = #0 then
Res:= Res + #$12
else
Res:= Res + Input[Index];
end;
ReplaceNull:= Res;
end;
我把这个字符串放到 Tstringlist 然后保存到文件:
ProgsList.SaveToFile(Mwork.pathLibs+'stream.ini', TEncoding.UTF8);
其他程序读取此列表,然后写入设备:
Progs:= TStringList.Create();
Progs.LoadFromFile(****);
s:= UTF8ToAnsi(stringreplace(Progs.Strings[i], #$12, #0, [rfReplaceAll, rfIgnoreCase]));
然后将其写入设备。
所以写的那行看起来像这样:
"'þ5'#0'ÿ'#$11'Новый комплекс 1'#0'T45/180;55;70;85;90;95;100;T45/180'#0'ÿ'"
在 Mac 上我成功地得到了相同的字符串。但设备无法以西里尔文显示。
【问题讨论】:
-
什么意思?使用统一码。还是您是 20 年前的时间旅行者?
-
“使用 unicode”是什么意思?
-
@artemk Delphi 字符串都是 unicode - 它们在 MacOS 和 Windows 上的显示都是一样的。 OSX 有完整的 unicode 支持。除非您正在使用已经编码为某种特定 ANSI 编码的某个地方的数据?否则,如果您遇到问题,请包含一些代码来演示该问题是什么。
-
如果你不知道 Unicode 是什么,你需要停下来学习。
-
Progs.LoadFromFile(****);应该是Progs.LoadFromFile(****, TEncoding.UTF8);
标签: macos delphi unicode decode delphi-10.1-berlin