มีวิธีที่ฉันมีผู้ใช้ด้วยตนเองค้นหา Codepage ปัจจุบันและตำแหน่งที่ตั้งของ windows OS ของพวกเขาหรือไม่ มีการตั้งค่ารีจิสทรีที่เก็บข้อมูลนั้นหรือไม่?
มันก็จะมีประโยชน์ถ้าเทคนิคนั้นทำงานกลับไปสู่ Windows 2000
มีวิธีที่ฉันมีผู้ใช้ด้วยตนเองค้นหา Codepage ปัจจุบันและตำแหน่งที่ตั้งของ windows OS ของพวกเขาหรือไม่ มีการตั้งค่ารีจิสทรีที่เก็บข้อมูลนั้นหรือไม่?
มันก็จะมีประโยชน์ถ้าเทคนิคนั้นทำงานกลับไปสู่ Windows 2000
คำตอบ:
chcpคุณจะได้รับหน้ารหัสที่ใช้งานอยู่
systeminfoจะแสดงสถานที่ตั้งของระบบและสถานที่ป้อนข้อมูลเหนือสิ่งอื่นใด
" หมายเหตุ : คำสั่งนี้ (systeminfo) ไม่พร้อมใช้งานใน Windows 2000 แต่คุณยังสามารถสืบค้นคอมพิวเตอร์ Windows 2000 ได้โดยใช้คำสั่งนี้บนคอมพิวเตอร์ที่ใช้ Windows XP หรือ Windows 2003 และตั้งค่าคอมพิวเตอร์ระยะไกลเป็นคอมพิวเตอร์ Windows 2000 หากผู้ใช้ปัจจุบันเข้าสู่ระบบ คำสั่งมีสิทธิ์ใช้งานบนเครื่องระยะไกล (ตัวอย่างเช่นผู้ดูแลระบบโดเมน) คุณไม่ต้องใช้ / u และ / p "
จากที่นี่
โปรดทราบว่าระบบที่กำหนดมีหน้ารหัสที่ใช้งานอยู่สองหน้าที่น่าสนใจตามที่กำหนดโดยการตั้งค่าดั้งเดิมชื่อภาษาสำหรับโปรแกรมที่ไม่ใช่ Unicodeซึ่งก่อนหน้านี้รู้จักกันในชื่อระบบภาษา (ดูที่ส่วนล่างสำหรับข้อมูลพื้นหลัง):
หมายเหตุ: มีอีกสองหน้ารหัสพวกเขาจะไม่ค่อยได้ใช้อีกต่อไปและดังนั้นจึงไม่ได้กล่าวถึงที่นี่ แต่ที่: EBCDICรหัสและ (pre-OS X) Macหน้ารหัส - ดูเอกสาร WinAPI
ใช้งานหน้ารหัส OEMจะได้รับได้ง่ายที่สุดผ่านทางchcp
ตามที่แสดงในลืมคำตอบที่เป็นประโยชน์ของอัฒภาค - chcp <codePageNum>
สมมติว่ามันก็ไม่ได้มีการเปลี่ยนแปลงอย่างชัดเจนในเซสชั่นที่มี
การกำหนดหน้ารหัส ANSI ที่ใช้งานนั้นไม่ง่าย แต่PowerShellสามารถช่วยได้เช่นกันพร้อมกับการพิจารณาชื่อและภาษาของระบบภาษา:
ในWindows 8+ / Windows Server 2012+ : ใช้Get-WinSystemLocale
cmdlet:
Get-WinSystemLocale | Select-Object Name, DisplayName,
@{ n='OEMCP'; e={ $_.TextInfo.OemCodePage } },
@{ n='ACP'; e={ $_.TextInfo.AnsiCodePage } }
หมายเหตุ: อาจเป็นการดึงดูดให้ใช้[cultureinfo]::CurrentCulture.TextInfo.ANSICodePage
ตัวอย่างเช่น แต่ไม่จำเป็นต้องสะท้อนหน้ารหัส ANSI ที่ใช้งานทั่วทั้งระบบ แต่เป็นหน้ารหัส ANSI ที่เกี่ยวข้องกับสถานที่ของผู้ใช้ปัจจุบัน (วัฒนธรรม) ซึ่งอาจแตกต่างกัน
ในระบบภาษาอังกฤษแบบสหรัฐอเมริกาผลตอบแทนข้างต้น:
Name DisplayName OEMCP ACP
---- ----------- ----- ---
en-US English (United States) 437 1252
OEMCP
คือหน้ารหัส OEM หน้าACP
รหัส ANSI
วิธีการที่ใช้รีจิสตรีซึ่งทำงานบนระบบเก่า ๆจนถึง Windows XP :
# Get the code pages:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage |
Select-Object OEMCP, ACP
ในระบบภาษาอังกฤษแบบสหรัฐอเมริกาผลตอบแทนข้างต้น:
OEMCP ACP
----- ---
437 1252
หากคุณต้องการได้รับชื่อ [เป็นมิตร]และ LCID ของโลแคลระบบ (แม้ว่าโปรดทราบว่า LCID จะถูกคัดค้าน):
[Globalization.CultureInfo]::GetCultureInfo([int] ('0x' + (
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Language' Default
).Default)
)
ในระบบภาษาอังกฤษแบบสหรัฐอเมริกาผลตอบแทนข้างต้น:
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
ข้อมูลความเป็นมา :
ตำแหน่งที่ตั้งของระบบคือชื่อดั้งเดิมของสิ่งที่เรียกว่าเป็นภาษาที่มีความหมายในปัจจุบันสำหรับโปรแกรมที่ไม่ใช่ Unicode (ดูคำศัพท์ NLS ) และตามที่ชื่อแนะนำ:
การตั้งค่านี้ใช้กับโปรแกรมดั้งเดิมเท่านั้น (โปรแกรมที่ไม่รองรับ Unicode)
มันใช้ทั้งระบบโดยไม่คำนึงถึงการตั้งค่าตำแหน่งที่ตั้งของผู้ใช้และสิทธิ์ผู้ดูแลระบบจะต้องเปลี่ยน
สิ่งสำคัญคือให้สังเกตว่าเป็นการตั้งค่าดั้งเดิมเนื่องจากโค้ดเพจไม่ได้ใช้กับโปรแกรมที่ใช้ Unicodeภายในอีกต่อไปและเรียกใช้เวอร์ชัน Unicode ของ Windows API
โดยเฉพาะอย่างยิ่งมันกำหนดหน้ารหัสที่ใช้งานเช่นการเข้ารหัสตัวอักษรที่ใช้โดยค่าเริ่มต้น :
หน้ารหัส ANSIที่จะใช้เมื่อโปรแกรมที่ไม่ใช่ Unicode โทรที่ไม่ใช่ Unicode (ANSI) รุ่นที่ใช้ Windows API สะดุดตารุ่น ANSI ของTextOut
ฟังก์ชั่นสำหรับการแปลสตริงไปและกลับจาก Unicode ซึ่งสะดุดตากำหนดวิธีสตริงของโปรแกรมแสดงผลใน GUI
หน้ารหัส OEMเพื่อให้ใช้งานโดยค่าเริ่มต้นในคอนโซลหน้าต่างchcp
ที่สะท้อนให้เห็นโดย
65001
ซึ่งแสดงถึงการเข้ารหัส UTF-8 ของ Unicode เป็นวิธีแก้ปัญหา แต่อาจทำให้โปรแกรมบรรทัดคำสั่งดั้งเดิมตีความข้อมูลผิดและอาจล้มเหลว - ดูคำตอบ StackOverflow นี้สำหรับรายละเอียด850
รันchcp 850
ในcmd.exe
และ$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)
ใน PowerShellแม้จะมีโลแคลของคำที่ใช้ในเทอมดั้งเดิมและภาษาของคำในเทอมปัจจุบัน:
เพียงด้านการควบคุมโดยการตั้งค่าเป็นชุดของหน้าเว็บรหัสที่ใช้งานและเริ่มต้นแบบอักษรบิตแมปไม่ได้นอกจากนี้ยังมีองค์ประกอบอื่น ๆ ของสถานที่เกิดเหตุ (ซึ่งถูกควบคุมโดยการตั้งค่าผู้ใช้ระดับสถาน)
โดยทั่วไปแล้วหน้ารหัสที่กำหนดจะใช้ร่วมกันโดยตำแหน่งที่ตั้งหลายแห่งและครอบคลุมหลายภาษา เช่นหน้ารหัสที่ใช้กันอย่างแพร่หลาย1252
ถูกใช้โดยหลายภาษาในยุโรปตะวันตกรวมถึงภาษาอังกฤษ
อย่างไรก็ตามเมื่อคุณเปลี่ยนการตั้งค่าผ่านแผงควบคุมคุณจะเลือกการตั้งค่าตามสถานที่เฉพาะ
สำหรับรายการหน้ารหัส Windows ทั้งหมดให้ดูที่https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers
GetACP()
ฟังก์ชั่น - technet.microsoft.com/en-us/dd318070 - นั่นคือลิงค์ที่น่าสนใจส่วนหมายเหตุทันทีบอกว่าฟังก์ชั่นการคืนค่านี้ไม่ได้แสดงถึงภาษาป้อนข้อมูลเริ่มต้นของผู้ใช้ที่เลือกและภาษา GUI แต่สิ่งที่แตกต่างกันอย่างสิ้นเชิง ...
สถานที่สามารถดูได้ใน msinfo32
API ของ Windows ที่ส่งกลับหน้ารหัสที่ใช้งานอยู่เป็นGetConsoleOutputCP ()
chcp
คำสั่งคอนโซล)
chcp
จะทำให้คุณได้รับหน้ารหัสOEM ที่ใช้งานอยู่ ในฐานะที่เป็นรัฐ mklement ในคำตอบของเขามีหน้ารหัสที่ใช้งานอยู่อีกใช้ Windows, หน้ารหัส ANSI สำหรับข้อมูลเพิ่มเติมโปรดดูที่คำตอบของ mklement