Delphi 德尔福2009 unicode+;ansi问题
我正在将一个isapi(pageproducers)应用程序从Delphi7移植到Delphi2009,这些页面基于UTF8中的html文件 除了启动Onhtmltag,我用特殊字符(如重音字符(áé…)替换任何值的透明标记,这些字符在输出中被替换为� 性格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
出了什么问题?作为调试过程的一部分,您应该准确地找出浏览器接收到的问号字符的字节值 您应该知道,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'