- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设由于某种不正当的原因,您想要显示 UTF8String 的原始字节内容。
var
utf8Str : UTF8String;
begin
utf8Str := '€ąćęłńóśźż';
end;
(1) 这不行,它显示可读的形式:
memo1.Lines.Add( RawByteString( utf8Str ));
// output: '€ąćęłńóśźż'
(2) 然而,这确实“有效” - 请注意连接:
memo1.Lines.Add( 'x' + RawByteString( utf8Str ));
// output: 'x€ąćęłńóśźż'
我理解(1),尽管编译器对 UnicodeString 的强制强制似乎阻止了按原样显示 RawByteString var。但是,为什么 (2) 中的行为会发生变化?
(3) 还是陌生人 - 让我们反转连接:
memo1.Lines.Add( RawByteString( utf8Str ) + 'x' );
// output: '€ąćęłńóśźżx'
我一直在阅读 Delphi 中新奇的字符串类型,并认为我理解它们是如何工作的,但这是一个难题。
最佳答案
RawByteString
的存在只是为了最大限度地减少与具有不同代码页亲和性的各种 AnsiString
一起使用的函数所需的重载数量。
一般情况下,不要声明 RawByteString
类型的变量。不要将值类型转换为该类型。不要对该类型的变量进行串联。您唯一能做的事情是:
StringCodePage
函数检查字符串的实际代码页的智能操作。例如,您会注意到 StringCodePage
函数本身使用 RawByteString
作为其参数类型。这样,它将与任何 AnsiString
一起使用,而不是在将其作为参数传递之前进行代码页转换。
对于您的情况,诸如串联之类的东西很大程度上是未定义的。 RTM 和 Update 2 之间的行为发生了变化,但是当 RTL 字符串串联函数接收具有不同代码页的多个字符串时,没有简单的方法可以确定最终字符串应使用什么代码页。这只是您不应该像此处那样连接它们的原因之一。
关于Delphi 2009 RawByteString 变幻莫测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/498315/
假设由于某种不正当的原因,您想要显示 UTF8String 的原始字节内容。 var utf8Str : UTF8String; begin utf8Str := '€ąćęłńóśźż
在 Delphi 2009 中将声明为 TByte 的字节数组转换为 RawByteString 的最佳方法是什么?这段代码确实有效,也许有更快的方法(无循环): function Conver
我在这里有一个类似的问题:Delphi XE - should I use String or AnsiString? 。在决定在我的(大型)库中使用 ANSI 字符串是正确的之后,我意识到我实际上可
我使用 libxml2 ( http://www.xmlsoft.org/ ) 在我的 Delphi 代码中读取/写入 xml 文件。 libxml2 对所有字符串使用 UTF-8 编码。 例如,函数
Free Pascal docs说明 RawByteString 类型是在 Free Pascal 中定义的,但我找不到位置。人们应该期望它是在 System 单元中定义的,就像在 Delphi 中一
我想将任意二进制数据作为 BLOB 存储到 SQlite 数据库中。 数据将通过此函数添加为值: procedure TSQLiteDatabase.AddParamText(name: string
在我的项目中,我需要使用正则表达式在 400mb TMemoryStream 对象中查找一些数据。我正在检查 delphi xe3 中的新正则表达式,但函数只匹配接收到的字符串参数,而不匹配原始字节串
我是一名优秀的程序员,十分优秀!