Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 德尔福2009 unicode+;ansi问题_Delphi_Unicode_Delphi 2009_Isapi - Fatal编程技术网

Delphi 德尔福2009 unicode+;ansi问题

Delphi 德尔福2009 unicode+;ansi问题,delphi,unicode,delphi-2009,isapi,Delphi,Unicode,Delphi 2009,Isapi,我正在将一个isapi(pageproducers)应用程序从Delphi7移植到Delphi2009,这些页面基于UTF8中的html文件 除了启动Onhtmltag,我用特殊字符(如重音字符(áé…)替换任何值的透明标记,这些字符在输出中被替换为� 性格 出了什么问题?作为调试过程的一部分,您应该准确地找出浏览器接收到的问号字符的字节值 您应该知道,Delphi2009的字符串类型是Unicode,而以前的所有版本都是ANSI。Delphi7引入了Utf8String类型,但Delphi20

我正在将一个isapi(pageproducers)应用程序从Delphi7移植到Delphi2009,这些页面基于UTF8中的html文件

除了启动Onhtmltag,我用特殊字符(如重音字符(áé…)替换任何值的透明标记,这些字符在输出中被替换为� 性格


出了什么问题?

作为调试过程的一部分,您应该准确地找出浏览器接收到的问号字符的字节值

您应该知道,Delphi2009的字符串类型是Unicode,而以前的所有版本都是ANSI。Delphi7引入了
Utf8String
类型,但Delphi2009使该类型变得特别。如果您不使用该类型来保存编码为UTF-8的字符串,那么您应该开始这样做。
Utf8String
变量中保存的值将在您将一个值分配给另一个值时自动转换为
UnicodeString

如果将UTF-8编码字符串存储在普通
AnsiString
变量中,则如果将其分配给
UnicodeString
,则将使用默认系统代码页将其转换为Unicode。那不是你想要的

如果要将UTF-8编码的文本分配给
string
类型的变量,请停止该操作。该类型希望它的值被编码为UTF-16,就像
WideString
总是这样


如果要使用
LoadFromFile
将文件加载到
TStrings
子体中,则需要开始使用该方法的第二个参数,该参数告诉它要使用什么编码。UTF-8编码文件应使用
TEncoding.UTF8
。默认值是
TEncoding.Unicode
,它是little-endian UTF-16。

作为调试过程的一部分,您应该了解浏览器为问号字符接收的字节值

您应该知道,Delphi2009的字符串类型是Unicode,而以前的所有版本都是ANSI。Delphi7引入了
Utf8String
类型,但Delphi2009使该类型变得特别。如果您不使用该类型来保存编码为UTF-8的字符串,那么您应该开始这样做。
Utf8String
变量中保存的值将在您将一个值分配给另一个值时自动转换为
UnicodeString

如果将UTF-8编码字符串存储在普通
AnsiString
变量中,则如果将其分配给
UnicodeString
,则将使用默认系统代码页将其转换为Unicode。那不是你想要的

如果要将UTF-8编码的文本分配给
string
类型的变量,请停止该操作。该类型希望它的值被编码为UTF-16,就像
WideString
总是这样


如果要使用
LoadFromFile
将文件加载到
TStrings
子体中,则需要开始使用该方法的第二个参数,该参数告诉它要使用什么编码。UTF-8编码文件应使用
TEncoding.UTF8
。默认值是
TEncoding.Unicode
,它是little-endian UTF-16。

这可能是字符编码问题

DelphiIDE通常使用Windows-1252或UTF-16对源代码进行编码。 HTML通常使用UTF-8

您可能需要在这些编码之间进行一些音译。 为此,您需要确切地了解使用了哪些编码(如提及)

或还原为HTML转义重音字符(如提及)

你能发布一个显示问题的小应用程序吗?(你可以给我发电子邮件,关于用户名中包含jeroen和域名中包含pluimers.com的任何内容都会到达我的邮箱)


--jeroen

这可能是一个字符编码问题

DelphiIDE通常使用Windows-1252或UTF-16对源代码进行编码。 HTML通常使用UTF-8

您可能需要在这些编码之间进行一些音译。 为此,您需要确切地了解使用了哪些编码(如提及)

或还原为HTML转义重音字符(如提及)

你能发布一个显示问题的小应用程序吗?(你可以给我发电子邮件,关于用户名中包含jeroen和域名中包含pluimers.com的任何内容都会到达我的邮箱)


--jeroen

谢谢你的帮助,经过一些测试,问题非常简单(或者也很愚蠢)


无需在unicodestring utf8string和Istring widestring之间手动转换。Delphi 2009字符串使用接近完美。

感谢您的帮助,经过一些测试,问题非常简单(或者也很愚蠢)


无需在unicodestring utf8string和Istring widestring之间手动转换。Delphi 2009字符串使用接近完美。

谢谢Rob,最后一段正是我问题的解决方案。实际上,是Delphi 6引入了UTF8String。谢谢Rob,最后一段正是我问题的解决方案。实际上,是Delphi 6引入了UTF8String。
response.contenttype := 'text/html charset=UTF-8'