Làm cách nào tôi có thể xác định thủ công CodePage và Locale của HĐH hiện tại


13

Có cách nào để người dùng tìm kiếm Codepage và ngôn ngữ hiện tại của hệ điều hành windows của họ không? Có một thiết lập đăng ký lưu trữ thông tin đó?

Nó cũng sẽ hữu ích nếu kỹ thuật này hoạt động hoàn toàn trở lại Windows 2000.

Câu trả lời:


16

chcp sẽ giúp bạn trang mã hoạt động.

systeminfo sẽ hiển thị miền địa phương hệ thống và miền địa phương đầu vào, trong số những thứ khác.

" Lưu ý : Lệnh này (systeminfo) không có sẵn trong Windows 2000 nhưng bạn vẫn có thể truy vấn máy tính Windows 2000 bằng cách chạy lệnh này trên máy tính Windows XP hoặc Windows 2003 và đặt máy tính từ xa thành máy tính Windows 2000. Nếu đăng nhập người dùng hiện tại thực thi điều này lệnh đã có đặc quyền trên máy từ xa (ví dụ: Quản trị viên tên miền), bạn không phải sử dụng / u và / p. "
Từ đây .


1
Hãy lưu ý rằng chcpsẽ giúp bạn có trang mã OEM hoạt động . Như mkuity nêu trong câu trả lời của mình, luôn có một trang mã hoạt động khác được sử dụng bởi Windows, trang mã ANSI. Để biết thêm thông tin, xem câu trả lời của mkuity .
kangalioo

6

Lưu ý rằng một hệ thống nhất định có hai trang mã đang hoạt động , được xác định bởi cài đặt kế thừa ngôn ngữ có tên cho các chương trình không Unicode , trước đây được gọi là ngôn ngữ hệ thống (xem phần dưới cùng để biết thông tin cơ bản):

  • các OEM trang mã để sử dụng bởi di sản console ứng dụng,
  • các ANSI trang mã để sử dụng bởi di sản GUI ứng dụng.

Lưu ý: Có hai trang mã nữa , nhưng chúng hiếm khi được sử dụng nữa và do đó không được thảo luận ở đây: mã EBCDIC và trang mã Mac (tiền OS X) - xem tài liệu WinAPI .

Các hoạt động trang mã OEM là cách dễ dàng nhất thu được thông qua chcp, như trong câu trả lời hữu ích Quên chấm phẩy của - giả sử nó không được thay đổi một cách rõ ràng trong phiên với chcp <codePageNum>.

Xác định trang mã ANSI hoạt động không đơn giản, nhưng PowerShell có thể giúp, cũng như xác định tên và ngôn ngữ của ngôn ngữ hệ thống:

Trong Windows 8+ / Windows Server 2012+ : Sử dụng Get-WinSystemLocalelệnh ghép ngắn:

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

Lưu ý: Chẳng hạn, có thể rất hấp dẫn khi sử dụng [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage, nhưng điều này không nhất thiết phản ánh trang mã ANSI hoạt động trên toàn hệ thống ; thay vào đó, đó là trang mã ANSI được liên kết với ngôn ngữ (văn hóa) hiện tại của người dùng , có thể khác.

Trên hệ thống US-English, các kết quả trên:

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

OEMCPlà trang mã OEM, ACPtrang mã ANSI.

Một phương pháp dựa trên đăng ký mà cũng hoạt động trên các hệ thống cũ xuống Windows XP :

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

Trên hệ thống US-English, các kết quả trên:

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

Nếu bạn cũng muốn có được hệ thống locale của [thân thiện] Tên và LCID (mặc dù lưu ý rằng LCIDs đang bị phản đối):

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

Trên hệ thống US-English, các kết quả trên:

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

Thông tin cơ bản :

Ngôn ngữ hệ thống tên kế thừa cho ngôn ngữ được mô tả nhiều hơn bây giờ cho các chương trình không phải là Unicode (xem thuật ngữ NLS ) và, như các tên gợi ý:

  • Các thiết lập chỉ áp dụng cho các chương trình di sản (chương trình không hỗ trợ Unicode).

  • áp dụng trên toàn hệ thống , bất kể cài đặt ngôn ngữ của người dùng cụ thể và các đặc quyền quản trị được yêu cầu để thay đổi nó.

Điều quan trọng cần lưu ý đó là là là một di sản thiết lập , bởi vì các trang mã không còn áp dụng cho các chương trình mà sử dụng Unicode trong nội bộ và gọi các phiên bản Unicode của Windows API.

Đáng chú ý, nó xác định các trang mã hoạt động , nghĩa là mã hóa ký tự được sử dụng theo mặc định :

  • các trang mã ANSI để sử dụng khi chương trình phi Unicode gọi (ANSI) phiên bản phi Unicode của Windows API, đáng chú ý là phiên bản ANSI của TextOutchức năng để dịch dây đến và đi từ Unicode, trong đó đáng chú ý là xác định cách chuỗi của chương trình render trong các GUI .

  • các trang mã OEM hiện hoạt theo mặc định trong giao diện điều khiển cửa sổ , như được phản ánh bởi chcp.

    • Trang mã hoạt động của cửa sổ giao diện điều khiển xác định cách nhập và xuất bàn phím từ các ứng dụng bảng điều khiển được diễn giải và hiển thị .
      • Lưu ý rằng điều đó có nghĩa là ngay cả đầu ra từ các ứng dụng bảng điều khiển Unicode được dịch sang trang mã hoạt động, điều này có thể dẫn đến mất thông tin; sử dụng trang mã giả 65001, đại diện cho mã hóa UTF-8 của Unicode, là một giải pháp, nhưng điều đó có thể khiến các chương trình dòng lệnh kế thừa hiểu sai dữ liệu và thậm chí không thành công - xem chi tiết câu trả lời StackOverflow này .
    • Không giống như trang mã ANSI, bạn có thể thay đổi trang mã [OEM] đang hoạt động theo yêu cầu cho một cửa sổ bảng điều khiển nhất định ; ví dụ, để chuyển sang trang mã OEM 850, chạy chcp 850trong cmd.exe, và $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)trong PowerShell.
  • ngoài ra, các trang mã EBCDICMac hiếm khi được sử dụng nữa .

Mặc dù ngôn ngữ được sử dụng trong thuật ngữ kế thừa và ngôn ngữ từ trong thuật ngữ hiện tại:

  • Các khía cạnh duy nhất được kiểm soát bởi cài đặt là tập hợp các trang mã hoạt độngphông chữ bitmap mặc định , không phải các yếu tố khác của ngôn ngữ (được điều khiển bởi cài đặt ngôn ngữ cấp độ người dùng).

  • Một trang mã nhất định thường được chia sẻ bởi nhiều địa phương và bao gồm nhiều ngôn ngữ; ví dụ: trang mã được sử dụng rộng rãi được sử1252 dụng bởi nhiều ngôn ngữ Tây Âu, bao gồm cả tiếng Anh.

Tuy nhiên, khi bạn thay đổi cài đặt qua Bảng điều khiển, bạn chọn cài đặt theo địa điểm cụ thể.

Để biết danh sách tất cả các trang mã Windows, hãy xem https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifier


GetACP()function - technet.microsoft.com/en-us/dd318070 - đó là liên kết thú vị, phần nhận xét hoàn toàn cho biết giá trị trả về của hàm này KHÔNG đại diện cho ngôn ngữ nhập mặc định và ngôn ngữ GUI được chọn của người dùng mà là một thứ hoàn toàn khác ...
Arioch '

Thật vậy, @ Arioch'The - đó là những gì tôi đã cố gắng làm rõ trong phần thông tin cơ bản: ngôn ngữ hệ thống (a) xác định các trang mã (nhưng không có cài đặt ngôn ngữ nào khác) trên toàn hệ thống , (b) không phân biệt người dùng cụ thể miền địa phương. Lưu ý cách trạng thái trang được liên kết (nhấn mạnh thêm): "Trả về mã định danh trang mã ANSI (ACP) hiện tại cho hệ điều hành ". Đối với sự thay thế bên thứ 3 tiềm năng của AppLocale: Tôi đã thêm một liên kết đến câu trả lời.
mkuity

1
Đó GetACP nhận xét / link là tôi quan trọng như là một "lời của vị thần" xác nhận rằng MBCS-to-Unicode chuyển đổi mặc định được nghĩ dự định được sử dụng độc lập và hệ điều hành toàn cầu, không chỉ là chi tiết thực hiện trong một số phiên bản Windows.
Arioch '

1
Có lẽ ngày nay cả MAC và EBCDIC tiền UNIX đều thuộc về "chỉ một số tầm quan trọng lịch sử". Tuy nhiên, tôi phần nào gắn liền với MAC CP đó, vì họ đã quản lý để tạo ra một biến thể khác của việc đánh dấu các dòng mới trong các tệp văn bản thuần túy, khác với cả hai cây UNIX và DOS-Win-OS / 2. Đó là trường hợp góc kỳ lạ tôi ghi nhớ.
Arioch '

1
Cảm ơn. Liên kết chuyên đề khác - docs.microsoft.com/en-us/windows/desktop/Intl/ mẹo - và EBCDIC được đánh dấu là "Windows 2000" - vì vậy trước khi w2k có lẽ nó không tồn tại và trong suốt nhiều năm kể từ đó, không ai làm phiền để cập nhật các nguồn chuyển đổi tiêu đề mà tôi đã sử dụng :-D
Arioch 'Ngày

1

Bản địa cũng có thể được nhìn thấy trong msinfo32.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.