这行:
TFileStream.Create(fileName, fmOpenRead or fmShareDenyNone);
如果文件名包含类似的内容,则会抛出异常ñ
你最终是在呼唤CreateFileA
、ANSI API,并且您使用的字符没有 ANSI 编码。这only超越这个的方法是打开文件CreateFileW
、Unicode API。
你可能没有意识到你打电话CreateFileA
,但这就是 Delphi 7 文件流的实现方式。
解决问题的一种简单方法是升级到最新的 Delphi,它对本机 Windows Unicode API 有良好的支持。
如果你被 ANSI Delphi 困住了,那么你仍然需要调用CreateFileW
。您可以执行此操作来创建文件句柄。您需要将 UTF-16 字符串传递给该 API。使用WideString
来存储它。您还需要从用户处获取 UTF-16 格式的文件名。这意味着致电GetOpenFileNameW
or IFileDialog
。通过将文件句柄传递给创建流THandleStream
.
为了使这一切成为可能,您可以使用 TNT Unicode 库。它们工作得很好,但会给你带来很大的负担。
坦率地说,正确的前进方向是使用支持 Unicode 的现代工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)