498 字
2 分钟
解决 MTP传输后中文文件名乱码 的问题
2024-05-03

病症#

文件自手机传输至电脑后,原本正常的文件名中的汉字会变成乱码

Terminal window
$ ls
101_澹板満澧炵泭.xml 103_閫氱敤褰遍煶浼樺寲.xml 105_浜哄0浼樺寲+澹板満澧炵泭_闊充箰.xml
102_浣庨煶+澹板満澧炵泭.xml 104_浜哄0浼樺寲_鐢靛奖.xml

解决方案#

需要将文件名从 UTF-8 编码转换至 GBK

Linux#

Terminal window
$ 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#

PowerShell terminal
# 切换到目标目录 (例如: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/
作者
YSChain
发布于
2024-05-03
许可协议
CC BY-NC-SA 4.0