查看问题详情

编号项目分类查看权限最后更新
0000091其它桌面环境界面相关公开2010-06-15 10:24
报告员lylddzyx1 分派给sejishikong  
优先级严重性小调整出现频率总是
状态 已解决处理状况已修正 
摘要0000091: 挂载NTFS分区时盘符出现5555乱码现象还是存在
描述挂载NTFS分区时盘符出现5555乱码现象还是存在,载Beta版也有这个现象。
截图如下:http://www.linuxfans.org/bbs/thread-190315-3-1.html
标签没加标签.

活动

sejishikong

2009-12-26 07:21

管理员   ~0000225

确认,但这个bug比较难解决,因为问题出在hal上。

sejishikong

2010-04-29 19:39

管理员   ~0000303

最后编辑: 2010-04-29 19:40

解决了一部分。不过还是有乱码现象。
windows下的卷标竟然有utf-8和gb两种编码。

nihui

2010-04-30 10:53

管理员   ~0000304

卷标和挂载的参数有关系吗?
下面这段是 kde solid hal 后端的挂载参数。
另外就是能不能直接进行编码探测?
kdelibs/solid/solid/backends/hal/haldevice.cpp
函数 QString HalDevice::volumeDescription() const 中
solid 的卷标获取是直接读 hal 的 volume.label 属性的。



    QStringList options;
    QString uid="uid=";

    if (halOptions.contains(uid)) {
        options << uid+QString::number(::getuid());
    }

#ifdef Q_OS_FREEBSD
    char *cType;
    if ( fstype=="vfat" && halOptions.contains("-L=")) {
        if ( (cType = getenv("LC_ALL")) || (cType = getenv("LC_CTYPE")) || (cType = getenv("LANG")) )
              options << "-L="+QString(cType);
    }
    else if ( (fstype.startsWith(QLatin1String("ntfs")) || fstype=="iso9660" || fstype=="udf") && halOptions.contains("-C=") ) {
        if ((cType = getenv("LC_ALL")) || (cType = getenv("LC_CTYPE")) || (cType = getenv("LANG")) )
            options << "-C="+QString(nl_langinfo(CODESET));
    }
#else
    if (fstype=="vfat" || fstype=="ntfs" || fstype=="iso9660" || fstype=="udf" ) {
        if (halOptions.contains("utf8"))
            options<<"utf8";
        else if (halOptions.contains("iocharset="))
            options<<"iocharset=utf8";
        if (halOptions.contains("shortname="))
            options<<"shortname=mixed";
        if (halOptions.contains("flush"))
            options<<"flush";
    }
    // pass our locale to the ntfs-3g driver so it can translate local characters
    else if ( halOptions.contains("locale=") ) {
        // have to obtain LC_CTYPE as returned by the `locale` command
        // check in the same order as `locale` does
        char *cType;
        if ( (cType = getenv("LC_ALL")) || (cType = getenv("LC_CTYPE")) || (cType = getenv("LANG")) ) {
            options << "locale="+QString(cType);
        }
    }
#endif

    msg << "" << fstype << options;

sejishikong

2010-04-30 13:09

管理员   ~0000305

问题在于好像hal本身探测出来的就不对。

不过这里的halOptions是从哪里来的?hal的配置会影响卷标?

sejishikong

2010-06-15 10:24

管理员   ~0000341

基本解决,部分仍有乱码,但不能具体的重现。

问题历史

日期 用户名 字段 更改
2009-11-22 16:08 lylddzyx1 新建问题
2009-12-26 07:21 sejishikong 注释已添加: 0000225
2009-12-26 07:21 sejishikong 分派给 => sejishikong
2009-12-26 07:21 sejishikong 状态 新建 => 已确认
2010-04-27 17:06 sejishikong 状态 已确认 => 已分配
2010-04-29 19:39 sejishikong 注释已添加: 0000303
2010-04-29 19:40 sejishikong 注释已编辑: 0000303
2010-04-30 10:53 nihui 注释已添加: 0000304
2010-04-30 13:09 sejishikong 注释已添加: 0000305
2010-06-15 10:24 sejishikong 注释已添加: 0000341
2010-06-15 10:24 sejishikong 状态 已分配 => 已解决
2010-06-15 10:24 sejishikong 处理状况 未处理 => 已修正