Lazarus解决含中文文件名或路径的使用问题

本文介绍如何在Lazarus中正确处理含有中文的文件路径,以避免因字符编码问题导致的文件操作失败。主要步骤包括使用UTF8ToAnsi转换路径,以及在显示时再转换回UTF8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

    其实用lazarus很久(也不算久啦。。),目前打算做完手头的最后一个小程序然后就转向c#窗体程序。。之前用lazarus的时候出了很多问题,资料也不是很好找,所以这回把比较容易说的记下来省得忘掉。

    Lazarus读取中文文件名并显出来这个过程并没多大问题,但是实际会出现各种各样的问题。比如加载一个路径或标题包含中文的文件,软件显示出来的路径甚至正常但是就是不能正常使用文件。那么,先上解决方案好了。。

当你获取文件路径时,这样处理文件路径:

1   pathvar:=utf8toansi(FilePath); 

这样之后,使用文件时就可以通过pathvar调用文件而不出错。不过,如果这样处理后,想要在窗体中显示文件名,你还需要做如下工作:

1   Label1.Caption:=ansitoutf8(FilePath);

实际使用时,你需要使用的是转为ansi的路径字符串,但是为了显示不出乱码,你需要将处理过的路径在显示时转回utf8.

我的某个程序中的一部分代码(节选):

 1   with OpenDialog1 do
 2   begin
 3     Filter:='TGE GUI File(*.gui)|*.gui';
 4     DefaultExt:='gui';
 5     FileName:='';
 6     Options:=[ofHideReadOnly,ofEnableSizing];
 7     if Execute then
 8       if ofExtensionDifferent in Options then
 9         Options:=[ofHideReadOnly,ofEnableSizing]
10       else
11         begin
12         filepath:=utf8toansi(FileName);         //*1
13         end;
14   end;
15 end;
16   Label1.Caption:=ansitoutf8(filepath);         //*2
17   if not FileExists(PChar(filepath)) then exit; //*3 
18   assignfile(guiFile, filepath);//'test.gui'
19   reset(guiFile);
20   assignfile(guiFile, filepath);//*4
21   reset(guiFile);     

 

     上面的代码中,FileName就是直接获取到的文件的路径,在一开始(*1)用filepath记录了变量。之后在下面(*2)为了显示正常而转回utf8用语Label的显示,之后在(*3和*4)的调用中,直接使用了filepath。这样就是正常的了。

    以上是上面所摘抄部分代码的原来的程序执行时的样子。


 

 

 

 

 

 

转载于:https://www.cnblogs.com/blumia/p/Lazarus_Chinese_Display.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值