LoadFromFile
,那么结果就是一个完全空的文件而没有错误指示。在我的几个应用程序中,我宁愿简单地失去一些糟糕的编码,即使在这种情况下我也不会得到错误报告。调试显示
MultiByteToWideChar
被调用两次,首先是为了获取输出缓冲区大小,然后进行转换。 但是TEncoding.UTF8包含一个私有的FMBToWCharFlags
值用于这些调用,并且它使用MB_ERR_INVALID_CHARS
值进行初始化。因此,获取字符计数的调用返回0,加载的文件完全为空。 不使用标志调用此API会“默默地删除非法代码点”。我的问题是如何最好地穿过编码区域的嵌套,以解决这是一个私有值的事实(并且需要这样做,因为它是所有线程的类变量)。 我认为可以添加一个自定义的UTF8编码,使用Marco Cantu的Delphi 2009书中的指导。并且它可以选择在调用没有标志的
MultiByteToWideChar
再次调用之后引发编码错误的异常。 但这并不能解决如何让我的自定义编码代替Tencoding.UTF8
使用的问题。如果我可以在初始化时将其设置为应用程序的默认值,或者通过实际修改
Tencoding.UFT8
的类变量来设置,那么这可能已足够。当然,我需要一种解决方案,而不必等待提出一个更健壮的设计的QC报告,获得接受,并看到它改变。
任何想法都非常欢迎。有人可以确认这是否仍然是XE4的问题吗?我尚未安装。