这一行:
TFileStream.Create(fileName, fmOpenRead or fmShareDenyNone);
Run Code Online (Sandbox Code Playgroud)
如果文件名包含类似ñ 的内容,则丢弃异常
您最终调用的CreateFileA是 ANSI API,并且您使用的字符没有 ANSI 编码。解决这个问题的唯一方法是使用CreateFileWUnicode API打开文件。
您可能没有意识到您调用了CreateFileA,但这就是 Delphi 7 文件流的实现方式。
解决问题的一种简单方法是升级到最新的 Delphi,它对本机 Windows Unicode API 有很好的支持。
如果您坚持使用 ANSI Delphi,那么您仍然需要调用CreateFileW. 您可以这样做来创建文件句柄。您需要将 UTF-16 字符串传递给该 API。使用WideString存储它。您还需要以 UTF-16 格式从用户那里获取文件名。这意味着调用GetOpenFileNameW或IFileDialog。通过将文件句柄传递给THandleStream.
为了使这一切成为可能,您将使用 TNT Unicode 库。它们运行良好,但会给您带来很大的负担。
坦率地说,正确的方法是使用支持 Unicode 的现代工具。
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |