- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在生成纹理图集,用于在我的应用程序中渲染 Unicode 文本。源文本存储在 ANSI 代码页(1250、1251、1254、1257 等)中。我希望能够从每个 ANSI 代码页生成所有符号。
这是我期望的代码概要:
for I := 0 to 255 do
begin
anChar := AnsiChar(I); //obtain AnsiChar
//Apply codepage without converting the chars
//<<--- this part does not work, showing:
//"E2033 Types of actual and formal var parameters must be identical"
SetCodePage(anChar, aCodepages[K], False);
//Assign AnsiChar to UnicodeChar (automatic conversion)
uniChar := anChar;
//Here we get Unicode character index
uniCode := Ord(uniChar);
end;
上面的代码不起作用(E2033),我不确定它是否是一个正确的解决方案。也许还有更短的版本。
考虑到特定代码页将 AnsiChar 转换为 Unicode 的正确方法是什么?
最佳答案
我会这样做:
function AnsiCharToWideChar(ac: AnsiChar; CodePage: UINT): WideChar;
begin
if MultiByteToWideChar(CodePage, 0, @ac, 1, @Result, 1) <> 1 then
RaiseLastOSError;
end;
我认为您应该避免使用字符串来进行本质上的字符操作。如果您预先知道需要支持哪些代码页,那么您可以将转换硬编码到以数组常量表示的查找表中。
请注意,ANSI 代码页中定义的所有字符都映射到基本多语言平面中的 Unicode 字符,因此由单个 UTF-16 字符表示。因此,上面的代码的大小假设。
但是,您所做的假设(并且该答案仍然存在)是单个字节表示 ANSI 字符集中的字符。对于许多字符集来说,这是一个有效的假设,例如单字节西方字符集(如 1252)。但也有一些字符集(如 932(日语)、949(韩语)等)是双字节字符集。您的整个方法因这些代码页而崩溃。我的猜测是只希望支持单字节字符集。
如果您正在编写跨平台代码,则可以将 MultiByteToWideChar
替换为 UnicodeFromLocaleChars
.
关于delphi - 如何将 AnsiChar 转换为具有特定 CodePage 的 UnicodeChar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338460/
我正在使用Delphi XE2。非常不言自明的问题。我有一个变体,其中存储单个字符(例如“?”),并且我想将其转换为 AnsiChar。如果我不能转换它,那么我该如何转换它。我尝试以通常的方式进行转换
我正在将一些古老的(从 2003 年开始)Delphi 代码升级到 Delphi Architect XE,但遇到了一些问题。我收到许多存在不兼容类型的错误。这些错误在 Delphi 6 中不会发生,
我从 Delphi 杂志加载了一些旧代码,当我在 Delphi 2010 中编译它时,我得到一个 E2010 不兼容类型:'AnsiChar' 和 'Char'。 如何解决此错误? pAddr :=
我正在生成纹理图集,用于在我的应用程序中渲染 Unicode 文本。源文本存储在 ANSI 代码页(1250、1251、1254、1257 等)中。我希望能够从每个 ANSI 代码页生成所有符号。 这
我正在将一个非常旧(10 年以上)的应用程序升级到最新的 Delphi XE。我不断遇到一些错误,例如 Incompatible types: 'WideChar' and 'AnsiChar' 我只
我正在尝试将一些旧的 Delphi 7 代码转换为 Delphi 2010 function AnsiToDOS(S: String): String; begin SetLength(Resul
我是一名优秀的程序员,十分优秀!