You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DiscUtils读取光盘文件全名时日文乱码、多段文件名变下划线问题求解

DiscUtils读取ISO文件名乱码解决方案

问题根因

  • 非ASCII字符(如日文)乱码:DiscUtils默认使用ASCII编码解析ISO9660标准分区的文件名,日文等宽字符无法被正确识别,统一被替换为下划线。
  • 多点点位被替换为下划线:ISO9660 Level 1标准限制文件名仅能存在1个点作为主文件名和后缀的分隔符,不符合该规则的字符都会被替换为下划线。

解决方法

两类问题都可以通过启用Joliet扩展读取+指定对应区域编码解决,Joliet是ISO9660的扩展标准,原生支持Unicode长文件名、多符号文件名规则。

修改后代码示例

' 需先导入System.Text命名空间
Imports System.Text

' 业务代码
Using isoStream As FileStream = New FileStream(curitem, FileMode.Open)
    ' 构造参数说明:第2个参数为是否启用Joliet扩展,第3个参数为ISO制作所用的区域编码,日文ISO固定为shift-jis
    Dim cd As CDReader = New CDReader(isoStream, True, Encoding.GetEncoding("shift-jis"))
    For Each CDentry As DiscUtils.DiscFileInfo In cd.Root.GetFiles()
        Console.WriteLine(CDentry.Name)
        Listbox1.Items.Add(CDentry.FullName.Replace(";1", "").ToLower())
    Next
End Using

兼容说明

  • 若使用的是DiscUtils 0.16及更早版本,无带编码参数的CDReader构造函数,可在初始化前先设置全局默认编码:
    DiscUtils.FileSystemOptions.DefaultEncoding = Encoding.GetEncoding("shift-jis")
    
  • 若ISO为其他区域制作,可替换编码参数:简体中文替换为gb2312、繁体中文替换为big5即可。

内容的提问来源于stack exchange,提问作者邱子恩

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:06:07