การแก้ไข: ตัวอักษรสตริงที่มี misinterpreted โดยคอมไพเลอร์ Visual C++ ใน Visual Studio 2010 เมื่อตัวอักษรสตริงที่จะใช้การเข้ารหัส UTF-8 และประกอบด้วยอักขระเอเชีย

นำไปใช้กับ: Visual Studio 2010

สำหรับรุ่น Microsoft Visual Studio 2008 ของบทความนี้ ดู980263

อาการ


พิจารณาสถานการณ์ต่อไปนี้:
  • คุณสามารถสร้างโครงการ Visual C++ ใน Microsoft Visual Studio 2010
  • แฟ้มในโครงการเริ่มต้นตัวอักษรสตริงที่แคบขึ้น ตัวอักษรเหล่านี้สตริงที่ประกอบด้วยอักขระเอเชีย และได้นำหน้า ด้วยตัวอักษร "ประเภททั่วไป"
  • แฟ้มถูกบันทึก โดยใช้การเข้ารหัส UTF-8
ในสถานการณ์สมมตินี้ เมื่อคุณคอมไพล์โครงการ แบบตัวอักษรสตริงที่มี misinterpreted โดยคอมไพเลอร์ นอกจากนี้ คุณพบปัญหาหนึ่งปัญหาต่อไปนี้:
  • เมื่อแฟ้มประกอบด้วยเครื่องหมายคำสั่งไบต์ (BOM), การดำเนินการคอมไพล์สำเร็จ อย่างไรก็ตาม ตัวอักษรสตริงที่จะยังคงแสดงอยู่ไม่ถูกต้องในแอพลิเคชันสร้างขึ้น นอกจากนี้ คุณอาจได้รับข้อความเตือนต่อไปนี้เมื่อคุณคอมไพล์โครงการ:
    คำเตือน C4566: อักขระที่แทน โดยสากล--ชื่ออักขระ 'xx' ไม่สามารถแสดงในโค้ดเพจปัจจุบัน
  • การดำเนินการคอมไพล์ล้มเหลว นอกจากนี้ คุณอาจได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้เมื่อคุณคอมไพล์โครงการ:
    ข้อผิดพลาด C2078: initializers มากเกินไป
  • การดำเนินการคอมไพล์ล้มเหลว นอกจากนี้ คุณอาจได้รับข้อความเตือนต่อไปนี้เมื่อคุณคอมไพล์โครงการ:
    คำเตือน C4129: 'อักขระ': รู้จักอักขระ escape ลำดับ

สาเหตุ


ปัญหานี้เกิดขึ้นเนื่องจากคอมไพเลอร์ถือว่า ตัวอักษรในแฟ้มไม่สามารถตีความเป็นไบต์ลูกค้าเป้าหมายของ mbcs ได้เข้ารหัสแทนที่จะเป็น Unicode ไบต์เดี่ยว เนื่องจากปัญหานี้ คอมไพเลอร์แปลแฟ้มไม่ถูกต้อง

การแก้ไข


เมื่อต้องการแก้ไขปัญหานี้ ใช้โปรแกรมแก้ไขด่วนนี้กับคอมพิวเตอร์ที่คุณรวบรวมโครงการ แล้ว บันทึกแฟ้มพร้อม ด้วยเครื่องหมายคำสั่งไบต์ และเพิ่มไดเรกทีฟ "pragma" ต่อไปนี้ก่อนตัวอักษรของสายอักขระในแฟ้มต้นฉบับ:
#pragma execution_character_set("utf-8")
หมายเหตุ ไดเรกทีฟ "pragma" นี้ตั้งค่าหน่วยการแปลสำหรับแฟ้มต้นฉบับจนกว่าไดเรกทีฟ "pragma" นี้จะถูกแทนที่ โดยไดเรกทีฟ "pragma" อื่น

ข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมแก้ไขด่วนนี้

ข้อมูลโปรแกรมแก้ไขด่วน

โปรแกรมแก้ไขด่วนจะพร้อมใช้งานได้ในขณะนี้จาก Microsoft อย่างไรก็ตาม มุ่งหวังเพื่อแก้ไขปัญหาที่อธิบายไว้ในบทความนี้เท่านั้น นำวิธีนี้ไปใช้กับระบบที่ประสบกับปัญหาที่เฉพาะเจาะจงเท่านั้น โปรแกรมแก้ไขด่วนนี้อาจได้รับการทดสอบเพิ่มเติม ดังนั้น ถ้าคุณจะไม่รุนแรงได้รับผลกระทบจากปัญหานี้ เราขอแนะนำให้ คุณรอถัดไปที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้ เมื่อต้องการแก้ไขปัญหานี้ทันที ติดต่อฝ่ายบริการสนับสนุนลูกค้าของ Microsoft เพื่อขอรับโปรแกรมแก้ไขด่วน สำหรับรายชื่อทั้งหมดของหมายเลขโทรศัพท์ของบริการการสนับสนุนลูกค้าของ Microsoft และข้อมูลเกี่ยวกับค่าใช้จ่ายสนับสนุน แวะไปที่เว็บไซต์ของ Microsoft ต่อไปนี้:หมายเหตุ ในกรณีพิเศษ ค่าบริการที่เรียกเก็บตามปกติเมื่อโทรติดต่อฝ่ายสนับสนุนอาจจะยกเลิกได้หาก Microsoft Support Professional ตัดสินว่าโปรแกรมปรับปรุงที่เฉพาะเจาะจงจะแก้ไขปัญหาของคุณได้ ค่าใช้จ่ายในการสนับสนุนตามปกติจะใช้กับคำถามและปัญหาในการสนับสนุนเพิ่มเติมซึ่งไม่สอดคล้องตามเกณฑ์สำหรับโปรแกรมปรับปรุงเฉพาะที่เกี่ยวข้อง

ข้อกำหนดเบื้องต้น

คุณต้องมี Microsoft Visual Studio 2010 ติดตั้งอยู่เพื่อใช้โปรแกรมแก้ไขด่วนนี้

ข้อมูลการเริ่มระบบใหม่

คุณไม่ต้องรีสตาร์ทคอมพิวเตอร์หลังจากใช้โปรแกรมแก้ไขด่วนนี้

ข้อมูลไฟล์

เวอร์ชันภาษาอังกฤษของโปรแกรมแก้ไขด่วนนี้มีแอตทริบิวต์ของแฟ้ม (หรือแอตทริบิวต์ของแฟ้มที่ใหม่กว่านี้) ซึ่งแสดงรายการไว้ในตารางต่อไปนี้ วันที่และเวลาสำหรับแฟ้มเหล่านี้จะแสดงรายการไว้ในรูปแบบเวลามาตรฐานสากล (UTC) เมื่อคุณดูข้อมูลแฟ้ม ระบบจะแปลงข้อมูลนี้เป็นเวลาท้องถิ่น เมื่อต้องการค้นหาความแตกต่างระหว่างเวลา UTC กับเวลาท้องถิ่น ใช้แท็บ โซนเวลา ในรายการ วันที่และเวลา ในแผงควบคุม
ชื่อไฟล์รุ่นของไฟล์ขนาดไฟล์วันที่เวลาแพลตฟอร์ม
C1.dll16.0.30319.351658,24023-Aug-201006:45x86
C1.dll16.0.30319.351723,77623-Aug-201006:45x86
C1.dll16.0.30319.351899,40023-Aug-201006:45x86
C1xx.dll16.0.30319.3512,286,92023-Aug-201006:45x86
C1xx.dll16.0.30319.3512,428,23223-Aug-201006:45x86
C1xx.dll16.0.30319.3512,659,66423-Aug-201006:45x86
Clui.dll16.0.30319.351201,03223-Aug-201006:45x86
Clui.dll16.0.30319.351202,56823-Aug-201006:45x86
Clui.dll16.0.30319.351219,97623-Aug-201006:45x86
Clui.dll16.0.30319.351221,00023-Aug-201006:45x86
Clui.dll16.0.30319.351290,63223-Aug-201006:45x86
Clui.dll16.0.30319.351291,65623-Aug-201006:45x86
Clui.dll16.0.30319.351292,68023-Aug-201006:45x86
Clui.dll16.0.30319.351293,70423-Aug-201006:45x86
Clui.dll16.0.30319.351408,39223-Aug-201006:45x86
Clui.dll16.0.30319.351408,90423-Aug-201006:45x86
Clui.dll16.0.30319.351450,37623-Aug-201006:45x86
Clui.dll16.0.30319.351460,10423-Aug-201006:45x86
Clui.dll16.0.30319.351460,61623-Aug-201006:45x86
Clui.dll16.0.30319.351478,02423-Aug-201006:45x86
Clui.dll16.0.30319.351478,53623-Aug-201006:45x86
Clui.dll16.0.30319.351483,65623-Aug-201006:45x86
Clui.dll16.0.30319.351484,16823-Aug-201006:45x86
Clui.dll16.0.30319.351486,72823-Aug-201006:45x86
Clui.dll16.0.30319.351487,24023-Aug-201006:45x86
Clui.dll16.0.30319.351491,84823-Aug-201006:45x86
Clui.dll16.0.30319.351492,36023-Aug-201006:45x86

สถานะ


Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"