Ini bukan pertanyaan pemrograman, apakah ada baris perintah atau alat Windows (Windows 7) untuk mendapatkan pengkodean file teks saat ini? Tentu saya bisa menulis aplikasi C # tapi saya ingin tahu apakah ada sesuatu yang sudah ada di dalamnya?
Ini bukan pertanyaan pemrograman, apakah ada baris perintah atau alat Windows (Windows 7) untuk mendapatkan pengkodean file teks saat ini? Tentu saya bisa menulis aplikasi C # tapi saya ingin tahu apakah ada sesuatu yang sudah ada di dalamnya?
Jawaban:
Buka file Anda menggunakan Notepad vanilla tua biasa yang datang dengan Windows.
Ini akan menunjukkan kepada Anda penyandian file ketika Anda mengklik " Simpan Sebagai ... ".
Ini akan terlihat seperti ini:
Apa pun pengkodean yang dipilih default, itulah pengkodean Anda saat ini untuk file.
Jika UTF-8, Anda dapat mengubahnya ke ANSI dan klik simpan untuk mengubah pengkodean (atau visa-sebaliknya).
Saya menyadari ada banyak jenis pengkodean, tetapi ini yang saya butuhkan ketika saya diberitahu bahwa file ekspor kami ada di UTF-8 dan mereka membutuhkan ANSI. Itu adalah ekspor sekali pakai, jadi Notepad cocok untuk saya.
FYI: Dari pemahaman saya, saya pikir " Unicode " (sebagaimana tercantum dalam Notepad) adalah istilah yang keliru untuk UTF-16.
Lebih lanjut di sini pada opsi " Unicode " Notepad : Windows 7 - UTF-8 dan Unicdoe
'File' alat baris perintah (Linux) tersedia di Windows melalui GnuWin32:
http://gnuwin32.sourceforge.net/packages/file.htm
Jika Anda telah menginstal git, itu terletak di C: \ Program Files \ git \ usr \ bin.
Contoh:
C: \ Users \ SH \ Downloads \ SquareRoot> file * _UpgradeReport_Files; direktori Debug; direktori durasi.h; Teks program ASCII C ++, dengan terminator garis CRLF ipch; direktori main.cpp; Teks program ASCII C, dengan terminator garis CRLF Precision.txt; Teks ASCII, dengan terminator garis CRLF Melepaskan; direktori Speed.txt; Teks ASCII, dengan terminator garis CRLF SquareRoot.sdf; data SquareRoot.sln; Teks UTF-8 Unicode (with BOM), dengan terminator garis CRLF SquareRoot.sln.docstates.suo; PCX ver. 2,5 data gambar SquareRoot.suo; Dokumen CDF V2, rusak: Tidak dapat membaca informasi ringkasan SquareRoot.vcproj; Teks dokumen XML SquareRoot.vcxproj; Teks dokumen XML SquareRoot.vcxproj.filters; Teks dokumen XML SquareRoot.vcxproj.user; Teks dokumen XML squarerootmethods.h; Teks program ASCII C, dengan terminator garis CRLF UpgradeLog.XML; Teks dokumen XML C: \ Users \ SH \ Downloads \ SquareRoot> file --mime-encoding * _UpgradeReport_Files; biner Debug; biner durasi.h; kami-ascii ipch; biner main.cpp; kami-ascii Precision.txt; kami-ascii Melepaskan; biner Speed.txt; kami-ascii SquareRoot.sdf; biner SquareRoot.sln; utf-8 SquareRoot.sln.docstates.suo; biner SquareRoot.suo; Dokumen CDF V2, rusak: Tidak dapat membaca ringkasan infobinary SquareRoot.vcproj; kami-ascii SquareRoot.vcxproj; utf-8 SquareRoot.vcxproj.filters; utf-8 SquareRoot.vcxproj.user; utf-8 squarerootmethods.h; kami-ascii UpgradeLog.XML; kami-ascii
file
perintah di cygwin . Semua perangkat POSIX untuk Windows seharusnya file
.
Jika Anda memiliki "git" atau "Cygwin" di Mesin Windows Anda, kemudian pergi ke folder tempat file Anda ada dan jalankan perintah:
file *
Ini akan memberi Anda detail pengodean dari semua file di folder itu.
file *
perintah
file --mime-encoding
untuk mendapatkan penyandian file
Alat lain yang menurut saya berguna: https://archive.codeplex.com/?p=encodingchecker EXE dapat ditemukan di sini
Inilah cara saya mendeteksi keluarga Unicode dari penyandian teks melalui BOM. Keakuratan metode ini rendah, karena metode ini hanya berfungsi pada file teks (khususnya file Unicode), dan standarnya adalah ascii
ketika BOM tidak ada (seperti kebanyakan editor teks, defaultnya adalah UTF8
jika Anda ingin mencocokkan ekosistem HTTP / web) ).
Pembaruan 2018 : Saya tidak lagi merekomendasikan metode ini. Saya merekomendasikan menggunakan file.exe dari GIT atau * nix tools seperti yang direkomendasikan oleh @Sybren, dan saya menunjukkan cara melakukannya melalui PowerShell di jawaban nanti .
# from https://gist.github.com/zommarin/1480974
function Get-FileEncoding($Path) {
$bytes = [byte[]](Get-Content $Path -Encoding byte -ReadCount 4 -TotalCount 4)
if(!$bytes) { return 'utf8' }
switch -regex ('{0:x2}{1:x2}{2:x2}{3:x2}' -f $bytes[0],$bytes[1],$bytes[2],$bytes[3]) {
'^efbbbf' { return 'utf8' }
'^2b2f76' { return 'utf7' }
'^fffe' { return 'unicode' }
'^feff' { return 'bigendianunicode' }
'^0000feff' { return 'utf32' }
default { return 'ascii' }
}
}
dir ~\Documents\WindowsPowershell -File |
select Name,@{Name='Encoding';Expression={Get-FileEncoding $_.FullName}} |
ft -AutoSize
Rekomendasi: ini dapat bekerja cukup baik jika dir
, ls
atau Get-ChildItem
hanya memeriksa dikenal file teks, dan ketika Anda hanya mencari "pengkodean buruk" dari daftar yang dikenal alat. (yaitu SQL Management Studio default ke UTF16, yang memecahkan GIT auto-cr-lf untuk Windows, yang merupakan default selama bertahun-tahun.)
Get-FileEncoding
sepertinya tidak ada di sistem saya. Apakah ini cmdlet khusus?
Get-FileEncoding
pada kode pos. Saya bahkan telah meninjau punycode dari python dan nodejs, tetapi versi kecil ini mencapai 80/20 untuk penggunaan saya (lebih seperti 99/1). Jika Anda meng-hosting file orang lain, saya sarankan Anda menggunakan file
perintah dari jawaban Syben ( stackoverflow.com/a/34766140/195755 ) atau decoder unicode lain yang berkualitas.
default
penyandian (bila tidak ada BOM). Untuk XML, JSON, dan JavaScript defaultnya adalah UTF8, tetapi jarak tempuh Anda mungkin beragam.
Saya menulis jawaban # 4 (pada saat penulisan). Tapi akhir-akhir ini saya telah menginstal git di semua komputer saya, jadi sekarang saya menggunakan solusi @ Sybren. Berikut ini adalah jawaban baru yang membuat solusi itu berguna dari PowerShell (tanpa meletakkan semua git / usr / bin di PATH, yang terlalu banyak kekacauan bagi saya).
Tambahkan ini ke Anda profile.ps1
:
$global:gitbin = 'C:\Program Files\Git\usr\bin'
Set-Alias file.exe $gitbin\file.exe
Dan digunakan seperti: file.exe --mime-encoding *
. Anda harus memasukkan .exe dalam perintah agar PS alias berfungsi.
Tetapi jika Anda tidak menyesuaikan profil PowerShell Anda. Saya sarankan Anda mulai dengan milik saya: https://gist.github.com/yzorg/8215221/8e38fd722a3dfc526bbe4668d1f3b08eb7c08be0
dan simpan untuk ~\Documents\WindowsPowerShell
. Aman digunakan di komputer tanpa git, tetapi akan menulis peringatan saat git tidak ditemukan.
The .exe di perintah juga bagaimana saya menggunakan C:\WINDOWS\system32\where.exe
dari PowerShell; dan banyak perintah CLI OS lainnya yang "disembunyikan secara default" oleh powershell, * shrug *.
file
sebagai alias Anda ke file.exe, bukan file.exe
¯ \ _ (ツ) _ / ¯
dir | where Size -lt 10000
vs where.exe git
.
where.exe
untuk membedakannya dari where
dalam PS, yang merupakan alias bawaan untuk Where-Object
. Contoh: where.exe git*
vs ls . | where Size -lt 10000
file.exe
vs .NET kelas statis, yang mungkin Anda butuhkan dalam skrip yang sama yang mendeteksi pengkodean. Contoh: [File]::SetCreationTime("readme.md", [DateTime]::Now)
.
Solusi sederhana mungkin membuka file di Firefox.
dan penyandian teks akan muncul di jendela "Info Halaman".
Catatan: Jika file tidak dalam format txt, cukup ganti namanya menjadi txt dan coba lagi.
PS Untuk info lebih lanjut lihat artikel ini .
Anda dapat menggunakan utilitas gratis yang disebut Encoding Recognizer (memerlukan java). Anda dapat menemukannya di http://mindprod.com/products2.html#ENCODINGRECOGNISER
Mirip dengan solusi yang tercantum di atas dengan Notepad, Anda juga dapat membuka file di Visual Studio, jika Anda menggunakannya. Di Visual Studio, Anda dapat memilih "File> Advanced Save Options ..."
Kotak kombo "Pengodean:" akan memberi tahu Anda secara spesifik pengodean mana yang sedang digunakan untuk file tersebut. Ini memiliki lebih banyak penyandian teks yang terdaftar di sana daripada Notepad, jadi ini berguna ketika berurusan dengan berbagai file dari seluruh dunia dan apa pun yang lainnya.
Sama seperti Notepad, Anda juga dapat mengubah pengkodean dari daftar opsi di sana, dan kemudian menyimpan file setelah menekan "OK". Anda juga dapat memilih pengkodean yang Anda inginkan melalui opsi "Simpan dengan Pengkodean ..." di dialog Simpan Sebagai (dengan mengeklik panah di sebelah tombol Simpan).
Beberapa kode C di sini untuk deteksi ascii, bom, dan utf8 yang andal: https://unicodebook.readthedocs.io/guess_encoding.html
Hanya ASCII, UTF-8 dan penyandian menggunakan BOM (UTF-7 dengan BOM, UTF-8 dengan BOM, UTF-16, dan UTF-32) memiliki algoritma yang andal untuk mendapatkan penyandian dokumen. Untuk semua pengkodean lainnya, Anda harus mempercayai heuristik berdasarkan statistik.
EDIT:
Versi Powerhell jawaban C # dari: Cara efektif untuk menemukan Pengkodean file apa pun . Hanya bekerja dengan tanda tangan (boms).
# get-encoding.ps1
param([Parameter(ValueFromPipeline=$True)] $filename)
begin {
# set .net current directoy
[Environment]::CurrentDirectory = (pwd).path
}
process {
$reader = [System.IO.StreamReader]::new($filename,
[System.Text.Encoding]::default,$true)
$peek = $reader.Peek()
$encoding = $reader.currentencoding
$reader.close()
[pscustomobject]@{Name=split-path $filename -leaf
BodyName=$encoding.BodyName
EncodingName=$encoding.EncodingName}
}
.\get-encoding chinese8.txt
Name BodyName EncodingName
---- -------- ------------
chinese8.txt utf-8 Unicode (UTF-8)
get-childitem -file | .\get-encoding
Satu-satunya cara yang saya temukan untuk melakukan ini adalah VIM atau Notepad ++.