zoukankan      html  css  js  c++  java
  • Lazarus解决含中文文件名或路径的使用问题

     

        其实用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。这样就是正常的了。

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


  • 相关阅读:
    哪种写法更好?<script></script> vs/or <script type=”text/javasript”></script>
    JS 脚本应该放在页面哪个位置 head body foot
    List<T> ForEach break
    嵌套JSON 取出name与value
    C# 改变图片尺寸(压缩),Image Resize
    tornado
    appachebench网站压力测试
    mysql分区分表
    redis的持久化存储,RDB与AOF
    MEMCACHE的内存管理和删除策略
  • 原文地址:https://www.cnblogs.com/blumia/p/Lazarus_Chinese_Display.html
Copyright © 2011-2022 走看看