Bagaimana saya bisa secara manual menentukan CodePage dan Lokal OS saat ini

13

Apakah ada cara agar pengguna secara manual mencari Codepage saat ini dan lokal OS windows mereka? Apakah ada pengaturan registri yang menyimpan informasi itu?

Ini juga akan berguna jika teknik ini bekerja kembali ke Windows 2000.

epotter
sumber

Jawaban:

16

chcp akan memberi Anda halaman kode aktif.

systeminfo akan menampilkan lokal sistem dan input lokal, antara lain.

" Catatan : Perintah ini (systeminfo) tidak tersedia di Windows 2000 tetapi Anda masih dapat meminta komputer Windows 2000 dengan menjalankan perintah ini di komputer Windows XP atau Windows 2003 dan mengatur komputer jarak jauh ke komputer Windows 2000. Jika pengguna saat ini log masuk yang menjalankan ini perintah sudah memiliki hak istimewa pada mesin jarak jauh (misalnya, Administrator Domain), Anda tidak harus menggunakan / u dan / p. "
Dari sini .

Titik Koma Lupa
sumber
1
Sadarilah bahwa Anda chcpakan mendapatkan halaman kode OEM aktif . Sebagai mklement menyatakan dalam jawabannya, selalu ada halaman kode aktif lain yang digunakan oleh Windows, halaman kode ANSI. Untuk informasi lebih lanjut lihat jawaban mklement .
kangalioo
6

Perhatikan bahwa sistem yang diberikan memiliki dua halaman kode aktif yang menarik , sebagaimana ditentukan oleh pengaturan lawas bernama bahasa untuk program non-Unicode , yang sebelumnya dikenal sebagai sistem lokal (lihat bagian bawah untuk informasi latar belakang):

  • yang OEM halaman kode untuk digunakan oleh warisan konsol aplikasi,
  • yang ANSI halaman kode untuk digunakan oleh warisan GUI aplikasi.

Catatan: Ada dua halaman kode lagi , tetapi mereka jarang digunakan lagi, dan karenanya tidak dibahas di sini: kode EBCDIC dan halaman kode Mac (pra-OS X) - lihat dokumentasi WinAPI .

The kode halaman OEM aktif paling mudah diperoleh melalui chcp, seperti yang ditunjukkan pada jawaban yang membantu Lupa Titik koma ini - dengan asumsi itu tidak secara eksplisit berubah di sesi dengan chcp <codePageNum>.

Menentukan halaman kode ANSI aktif tidak sesederhana itu, tetapi PowerShell dapat membantu, juga dengan menentukan nama dan bahasa lokal sistem:

Di Windows 8+ / Windows Server 2012+ : Gunakan Get-WinSystemLocalecmdlet:

Get-WinSystemLocale | Select-Object Name, DisplayName, 
                        @{ n='OEMCP'; e={ $_.TextInfo.OemCodePage } }, 
                        @{ n='ACP';   e={ $_.TextInfo.AnsiCodePage } }

Catatan: Mungkin tergoda untuk menggunakan [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage, misalnya, tetapi ini tidak harus mencerminkan halaman kode ANSI aktif seluruh sistem ; alih-alih, ini adalah halaman kode ANSI yang terkait dengan lokal pengguna saat ini (budaya), yang mungkin berbeda.

Pada sistem AS-Inggris, hasil di atas:

Name  DisplayName             OEMCP  ACP
----  -----------             -----  ---
en-US English (United States)   437 1252

OEMCPadalah halaman kode OEM, ACPhalaman kode ANSI.

Sebuah metode berbasis registry- yang juga bekerja pada sistem yang lebih tua ke Windows XP :

# Get the code pages:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage | 
     Select-Object OEMCP, ACP

Pada sistem AS-Inggris, hasil di atas:

OEMCP ACP 
----- --- 
437   1252

Jika Anda juga ingin mendapatkan sistem lokal ini [ramah] nama dan LCID (meskipun diketahui bahwa LCIDs yang usang):

[Globalization.CultureInfo]::GetCultureInfo([int] ('0x' + (
        Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Language' Default
      ).Default)
)

Pada sistem AS-Inggris, hasil di atas:

LCID             Name             DisplayName                                                                                                                                      
----             ----             -----------                                                                                                                                      
1033             en-US            English (United States)                                                                                                                          

Informasi latar belakang :

Sistem lokal adalah nama lama untuk apa yang sekarang lebih deskriptif disebut bahasa untuk program non-Unicode (lihat terminologi NLS ), dan, seperti namanya:

  • The Pengaturan hanya berlaku untuk program warisan (program yang tidak mendukung Unicode).

  • Ini berlaku di seluruh sistem , terlepas dari pengaturan lokal pengguna tertentu , dan hak administratif diperlukan untuk mengubahnya.

Hal ini penting untuk dicatat bahwa adalah merupakan suatu warisan pengaturan , karena halaman kode tidak lagi berlaku untuk program yang menggunakan Unicode internal dan memanggil versi Unicode dari Windows API.

Khususnya, ini menentukan halaman kode aktif , yaitu, pengkodean karakter yang digunakan secara default :

  • yang halaman kode ANSI untuk digunakan saat program non-Unicode memanggil non-Unicode (ANSI) versi Windows API, terutama versi ANSI dari TextOutfungsi untuk menerjemahkan string ke dan dari Unicode, yang terutama menentukan bagaimana string program render di GUI .

  • yang kode halaman OEM untuk membuat aktif secara default di jendela konsol , yang tercermin chcp.

    • Halaman kode aktif jendela konsol menentukan bagaimana input dan output keyboard dari aplikasi konsol ditafsirkan dan ditampilkan .
      • Perhatikan bahwa itu berarti bahwa bahkan keluaran dari aplikasi konsol Unicode diterjemahkan ke halaman kode aktif, yang dapat mengakibatkan hilangnya informasi; penggunaan halaman kode pseudo 65001, yang mewakili pengkodean UTF-8 Unicode, adalah solusi, tetapi itu dapat menyebabkan program baris perintah lama salah menafsirkan data dan bahkan gagal - lihat jawaban StackOverflow ini untuk detailnya.
    • Tidak seperti halaman kode ANSI, Anda dapat mengubah halaman kode [OEM] aktif sesuai permintaan untuk jendela konsol yang diberikan ; misal, untuk beralih ke halaman kode OEM 850, jalankan chcp 850di cmd.exe, dan $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)di PowerShell.
  • selain itu, halaman kode EBCDIC dan Mac yang jarang digunakan lagi .

Meskipun kata lokal digunakan dalam istilah lama dan kata bahasa dalam istilah saat ini:

  • Satu- satunya aspek yang dikendalikan oleh pengaturan adalah set halaman kode aktif dan font bitmap default , bukan juga elemen lokal lainnya (yang dikendalikan oleh pengaturan lokal tingkat pengguna).

  • Halaman kode yang diberikan biasanya dibagikan oleh banyak lokal dan mencakup beberapa bahasa; misalnya, halaman kode yang banyak digunakan1252 digunakan oleh banyak bahasa Eropa Barat, termasuk bahasa Inggris.

Namun, ketika Anda mengubah pengaturan melalui Control Panel, Anda memilih pengaturan dengan cara lokal tertentu.

Untuk daftar semua halaman kode Windows, lihat https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers

mklement
sumber
GetACP()function - technet.microsoft.com/en-us/dd318070 - itu adalah tautan yang menarik, bagian komentar langsung mengatakan nilai pengembalian fungsi ini TIDAK mewakili bahasa input default yang dipilih pengguna dan bahasa GUI tetapi sesuatu yang sama sekali berbeda ...
Arioch 'The
Memang, @ Arioch'The - itulah yang saya coba perjelas di bagian informasi latar belakang: sistem lokal (a) menentukan halaman kode (tapi tidak ada pengaturan lokal lain) di seluruh sistem , (b) terlepas dari pengguna yang diberikan lokal Perhatikan bagaimana halaman tertaut menyatakan (penekanan ditambahkan): "Mengembalikan pengidentifikasi halaman kode ANSI Windows (ACP) saat ini untuk sistem operasi ". Adapun kemungkinan pengganti AppLocale pihak ketiga: Saya telah menambahkan tautan ke jawabannya.
mklement
1
Komentar / tautan GetACP yang menurut saya penting sebagai konfirmasi "firman tuhan" bahwa konversi default MBCS-ke-Unicode dimaksudkan untuk menjadi independen-pengguna dan OS-global, bukan hanya detail implementasi di beberapa versi Windows.
Arioch 'The
1
Mungkin hari ini baik MAC pra-UNIX maupun EBCDIC sama-sama termasuk dalam ceruk "hanya dari beberapa kepentingan historis". Namun saya agak melekat pada MAC CP itu, karena mereka berhasil membuat varian lain dari menandai baris baru dalam file teks biasa, berbeda dari pohon UNIX dan DOS-Win-OS / 2. Itu adalah kasus sudut eksotis yang saya hafal.
Arioch 'The
1
Terima kasih. Tautan lebih topikal - docs.microsoft.com/en-us/windows/desktop/Intl/… - dan EBCDIC ditandai "Windows 2000" - jadi sebelum w2k mungkin tidak ada, dan selama bertahun-tahun sejak itu tidak ada yang peduli untuk memperbarui sumber konversi tajuk yang saya gunakan :-D
Arioch 'The
1

Lokal juga dapat dilihat di msinfo32.

epotter
sumber
0

Windows API yang mengembalikan halaman kode aktif adalah GetConsoleOutputCP () .

lamban
sumber
codepage OEM aktif (bukan codepage ANSI) dan hanya jika diganti dengan penggunaan ( chcpperintah konsol )
Arioch 'The