Minggu, 17 November 2019

PowerShell Script untuk Mengonversi Nama File UTF-8 yang Salah Interpretasi

Sering kali ketika menyalin file di Windows, beberapa aplikasi salah menginterpretasikan UTF-8 sebagai CodePage 1252, sehingga nama file menjadi rusak. Skrip PowerShell berikut membantu mengembalikan nama file ke UTF-8 yang sebenarnya.

Skrip PowerShell

#region Parameters
param(
  [string]$Dir = "."
)
#endregion

# Pastikan konsol menggunakan CP 65001 dan font NSimSun untuk menampilkan karakter CJK
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$files = Get-ChildItem -File -Path $Dir -Recurse -Name

foreach ($f in $files) {
  $bytes = [System.Text.Encoding]::GetEncoding(1252).GetBytes($f)
  $nf = [io.path]::GetFileName([System.Text.Encoding]::UTF8.GetString($bytes))
  Write-Host "$f → $nf"
  Rename-Item -LiteralPath "$f" -NewName "$nf"
}

# Pesan "Press any key" ketika dijalankan lewat klik kanan
$auxRegKey='\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\0\Command'
$auxRegVal=(get-itemproperty -literalpath HKLM:$auxRegKey).'(default)'
$auxRegCmd=$auxRegVal.Split(' ',3)[2].Replace('%1', $MyInvocation.MyCommand.Definition)
if ("`"$($myinvocation.Line)`"" -eq $auxRegCmd) {
  Write-Host "`nPress any key to exit..."
  $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
}

Cara Menggunakan

  1. Simpan skrip sebagai utf8_rename.ps1 di folder paling atas tempat file yang salah interpretasi berada.
  2. Klik kanan skrip di Explorer dan pilih Run with PowerShell.
  3. Pastikan konsol disetel ke CodePage 65001 (UTF-8) dan font mendukung karakter khusus seperti NSimSun.

Catatan

  • Skrip ini mengonversi semua file secara rekursif dalam folder yang ditentukan.
  • Gunakan -LiteralPath pada Rename-Item agar nama file dengan karakter seperti [ atau ] tidak menyebabkan error.
  • Windows 10 19H1 ke atas menyediakan opsi untuk mengatur sistem codepage ke UTF-8, yang bisa membantu mengurangi kasus salah interpretasi.

Label: , , , , ,

<< Beranda