498 字
2 分钟
解决 MTP传输后中文文件名乱码 的问题
病症
文件自手机传输至电脑后,原本正常的文件名中的汉字会变成乱码
$ ls
101_澹板満澧炵泭.xml 103_閫氱敤褰遍煶浼樺寲.xml 105_浜哄0浼樺寲+澹板満澧炵泭_闊充箰.xml102_浣庨煶+澹板満澧炵泭.xml 104_浜哄0浼樺寲_鐢靛奖.xml解决方案
需要将文件名从 UTF-8 编码转换至 GBK
Linux
$ sudo apt-get install convmv$ cd <TargetPath>$ convmv -f UTF-8 -t GBK --notest *mv "./101_澹板満澧炵泭.xml" "./101_声场增益.xml"mv "./102_浣庨煶+澹板満澧炵泭.xml" "./102_低音+声场增益.xml"mv "./103_閫氱敤褰遍煶浼樺寲.xml" "./103_通用影音优化.xml"mv "./104_浜哄0浼樺寲_鐢靛奖.xml" "./104_人声优化_电影.xml"mv "./105_浜哄0浼樺寲+澹板満澧炵泭_闊充箰.xml" "./105_人声优化+声场增益_音乐.xml"Ready! I converted 5 files in 0 seconds.Windows
# 切换到目标目录 (例如:cd C:\Your\Files)$targetPath = Get-Location
Get-ChildItem -Path $targetPath | ForEach-Object { $originalName = $_.Name try { # 假设文件名是 UTF-8 编码,但被系统错误地显示为 ANSI/GBK # 1. 将 Unicode 字符串(Windows显示的文件名)编码成 UTF-8 字节数组 $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($originalName)
# 2. 将 UTF-8 字节数组解码成 GBK 字符串 # 注意:这里是为了生成一个GBK兼容的字符串,用于重命名。 # 如果原始文件名是“正常的”Unicode,并且你只是想创建一个GBK版本的文件名, # 那么可能会有更好的方法。 $gbkString = [System.Text.Encoding]::GetEncoding("GBK").GetString($utf8Bytes)
# 3. 如果需要,可以进一步处理 $gbkString,例如替换一些特殊字符
# 检查是否需要重命名 if ($originalName -ne $gbkString) { $oldPath = $_.FullName $newPath = Join-Path $_.Directory.FullName $gbkString Write-Host "尝试重命名: '$originalName' -> '$gbkString'" Rename-Item -Path $oldPath -NewName $gbkString -ErrorAction Stop Write-Host "成功重命名: '$originalName' -> '$gbkString'" } else { Write-Host "文件名 '$originalName' 无需转换或转换后相同。" } } catch { Write-Warning "处理文件名 '$originalName' 时出错: $_" }}
Write-Host "文件名转换完成。" 解决 MTP传输后中文文件名乱码 的问题
https://yschain.top/posts/chinese-filename-garbled-after-mtp-transfer/