UTF-8 ที่ไม่มี BOM


180

ฉันมีไฟล์จาวาสคริปต์ที่ฉันต้องการให้บันทึกใน UTF-8 (ไม่มี BOM) ทุกครั้งที่ฉันแปลงเป็นรูปแบบที่ถูกต้องในNotepad ++พวกเขาจะถูกเปลี่ยนกลับเป็น UTF-8 พร้อม BOM เมื่อฉันเปิดใน Visual Studio ฉันจะหยุด VS2010 ไม่ให้ทำเช่นนั้นได้อย่างไร

คำถามอื่นคือ UTF-8 ที่ไม่มีลายเซ็นใน Visual Studio เหมือนกับ UTF-8 ที่ไม่มี BOM หรือไม่


13
ไฟล์ที่บันทึกด้วย (utf-8 ที่ไม่มี BOM) ถูกเปลี่ยนกลับเป็น (utf-8 พร้อม BOM) .. นี่เป็นปัญหา
kabaros


วิธีแก้ปัญหา kabaros นั้นง่ายมากเพียงแค่บันทึกไฟล์ด้วย visual studio โดยใช้ uft-8 โดยไม่ต้องใช้ BOM ใช่เป็นไปได้ - ตามที่ Keavon สังเกตเห็น "UTF-8 ที่ไม่มีลายเซ็นต์อยู่ใกล้กับส่วนล่างสุดของรายการ" ค่อนข้างแปลกที่ utf-8 ที่มีลายเซ็นอยู่ที่จุดเริ่มต้นและ utf-8 ที่ไม่มีลายเซ็นก็เกือบจะจบแล้ว แต่อย่างน้อยมันก็แก้ปัญหาที่ทำให้หงุดหงิดนี้ได้
cyriel

คำตอบ:


227

BOM หรือ Byte Order Mark บางครั้งก็ค่อนข้างน่ารำคาญ Visual Studio จะไม่เปลี่ยนแปลงไฟล์จนกว่าคุณจะบันทึก (ตามที่ Hans พูด)

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


11
ฉันสงสัยว่ามีตัวเลือกให้เปิดใช้งานสิ่งนี้เป็นค่าเริ่มต้นสำหรับไฟล์ทั้งหมดหรือไม่
mihai

3
มันบันทึกไฟล์อย่างถูกต้องเมื่อฉันเลือก "บันทึกด้วยการเข้ารหัส" แต่ฉันไม่เห็น "ตัวเลือกบันทึกขั้นสูง" ในเมนูไฟล์ของฉันไม่ว่าฉันจะเปิดไฟล์ประเภทใดในเอดิเตอร์ อืม ....
คริสเจย์เนส

20
@ChrisJaynes คลิกขวาที่แถบเมนูในที่โล่งแล้วคลิกกำหนด ... คำสั่ง ... (*) เมนูย่อย: ไฟล์ ... [เพิ่มคำสั่ง] ... เพิ่มใน "ตัวเลือกบันทึกขั้นสูง" ฉันใส่ มันอยู่ด้านบน "บันทึกการเลือก"
Tracker1

4
ฉันไม่มีรายการ "UTF-8 ที่ไม่มีลายเซ็น" ... ปัญหาคืออะไร?
Marco Klein

14
หมายเหตุ: UTF-8 ที่ไม่มีลายเซ็นต์อยู่ใกล้กับส่วนล่างสุดของรายการ
Keavon

29

ตอนนี้มีรูปภาพ

  1. ไปที่->FileSave As

    ไฟล์ / บันทึกเป็น

  2. Save with Encoding...จากนั้นปุ่มบันทึกคลิกที่รูปสามเหลี่ยมและคลิก

    บันทึกด้วยการเข้ารหัส

  3. คลิกตกลงเพื่อแทนที่ไฟล์แล้วจากรายการของการเข้ารหัสหาUTF-8 Without signature-> OKคลิก

    UTF-8 ไม่มีลายเซ็น

หวังว่านี่จะช่วยคุณประหยัดเวลา


26

ฉันสร้างส่วนขยายการเข้ารหัสไฟล์ Fixที่ป้องกันไม่ให้ Visual Studio 2010+ เพิ่มไฟล์ BOM ไปยัง UTF-8


1
ขอบคุณสำหรับปลั๊กอินนั้น! ควรมีวิธีอื่นในการระบุประเภทไฟล์มากกว่าการใช้นิพจน์ปกติในการตั้งค่าต่อท้ายไฟล์ที่ตรงกับ นอกจากนี้ปลั๊กอินจะทำงานกับไฟล์เมื่อฉันบันทึกเท่านั้นเมื่อฉันสร้างจาวาสคริปต์ในตอนแรกปลั๊กอินจะมี BOM (เพิ่ม 3 ไบต์)
Anders Lindén

6

น่าเสียดายที่นี่ไม่สามารถใช้กับไฟล์ csproj ไม่มี "ตัวเลือกบันทึกขั้นสูง" และแม้ว่าคุณได้ตั้งค่าเป็น "UTF-8 โดยไม่ต้องมีลายเซ็น" สำหรับไฟล์ cs ไฟล์ csproj จะยังคงบันทึกด้วย BOM หากคุณใช้ VSS มันยังคงบ่นเกี่ยวกับไฟล์โครงการ


บางทีคุณควรย้ายจาก VSS เป็น SVN ฉันจำได้ว่าเห็นเครื่องมือที่สามารถแปลงให้คุณได้ SVN นั้นฟรีและคุณสามารถใช้ปลั๊กอิน SVN แบบวิชวลใน Visual Studio ของคุณและใช้ SVN ได้โดยตรงจาก UI
Dave81

7
"บางทีคุณควรย้ายจาก VSS เป็น SVN" คำแนะนำแบบไหนกันนะ? พวกเราส่วนใหญ่ที่ทำงานกับซอฟต์แวร์ระดับองค์กรไม่สามารถเลือกและเลือกระบบควบคุมแหล่งที่มาของเรา SVN เป็นเจ้าของปัญหาซึ่งเป็นสิ่งที่กระตุ้นให้มีการสร้างคอมไพล์เพราะพวกเขาเบื่อหน่ายกับ SVN
พระอิศวร

4

UTF-8 - "บันทึกเป็น" (ไม่มีลายเซ็น) ค่าเริ่มต้น - คำขอให้รวมค่าเริ่มต้นสำหรับ UTF โดยไม่มีลายเซ็น

VS 2017 สนับสนุนEditorConfig แบบดั้งเดิมดังนั้นวิธีแก้ไขปัญหาที่แนะนำคือการเพิ่ม.editorconfigไฟล์ลงในฐานรหัสและชุดของcharset => utf-8คุณ จากนั้นเมื่อคุณบันทึกไฟล์ไฟล์จะถูกบันทึกเป็น UTF-8 โดยไม่มี BOM


ฉันกลัว VS 2017 ยังไม่สนับสนุนcharsetใน. editorconfig github.com/editorconfig/editorconfig-visualstudio/issues/…
BlazingFrog

2

สำหรับ vs2010 c ++ จะมีปัญหากับ UTF8 ที่ไม่มี BOM เมื่อไฟล์ต้นฉบับมีอักขระหลายไบต์ (เช่นจีน)

อักขระเหล่านั้นจะไม่ถูกจดจำอย่างถูกต้องหากไม่มี BOM และทำให้การคอมไพล์ล้มเหลว


เพราะบน Windows ที่ไม่มี BOM ไฟล์จะถูกสันนิษฐานว่ามีการเข้ารหัส ANSI ดังนั้นมันจะเสียหาย
phuclv

2

เมื่อเร็ว ๆ นี้ฉันพบเครื่องมือบรรทัดคำสั่งเล็ก ๆ นี้ซึ่งเพิ่มหรือลบ BOM ในไฟล์ที่เข้ารหัส UTF-8 arbitary: UTF BOM Utils ( ลิงก์ใหม่ที่ github)

ข้อเสียเปรียบเล็กน้อยคุณสามารถดาวน์โหลดได้เฉพาะซอร์สโค้ด C ++ เท่านั้น คุณต้องสร้าง makefile (ด้วยCMakeเป็นต้น) และคอมไพล์ด้วยตัวเองไบนารีจะไม่มีให้ในหน้านี้ อย่างไรก็ตามสำหรับนักพัฒนาซอฟต์แวร์นี้ไม่ควรมีปัญหาใด ๆ


1

แม้จะใช้โซลูชันของ Dave81 ชุมชน Visual Studio 2015 ก็ยังคงคืนค่าไฟล์ของฉันเป็น UTF8-BOM ทุกครั้งที่ฉันบันทึกไฟล์ html นั้น

เมื่อฉันสร้างไฟล์ html นั้นฉันคลิกขวาที่โครงการและเลือก "เพิ่ม" แล้วเพิ่มไฟล์ HTML

โดยค่าเริ่มต้น Visual Studio จะรวม<meta charset="utf-8" />แท็กในไฟล์ HTML ของคุณ

เพียงแค่นำแท็กออกจากนั้นใช้โซลูชันของ Dave81 ทำให้ปัญหาเกิดขึ้นจริงในครั้งนี้

ดูเหมือนว่า Visual Studio จะแยกวิเคราะห์ไฟล์ html ของคุณและเมื่อมันเห็นแท็กนั้นก็จะแปลงไฟล์เป็น UTF8-BOM โดยไม่คำนึงถึงรูปแบบไฟล์ต้นฉบับ (UTF-8 ที่ไม่มี BOM)

ฉันจะแสดงความคิดเห็นโดยตรงภายใต้โซลูชันของ Dave81 แต่ฉันไม่มีคะแนนเพียงพอที่จะทำเช่นนั้น ...


0

สำหรับVisual Studio Code ให้ทำดังนี้

  1. จากด้านล่างขวาเลือกการเข้ารหัสปัจจุบัน ป้อนคำอธิบายรูปภาพที่นี่
  2. จากตัวเลือกเลือกบันทึกด้วยการเข้ารหัส ป้อนคำอธิบายรูปภาพที่นี่
  3. จากตัวเลือกเลือกUTF-8 ป้อนคำอธิบายรูปภาพที่นี่

รหัส VS และ VS นั้นแตกต่างกันมาก คำถามนี้เกี่ยวกับ VS
phuclv

แต่คำถามคือสำหรับ VS และคุณตอบสำหรับ VScode ซึ่งแก้ไข prob ของฉันจึง upvoting มัน
Ashu

-2
UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter  sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);

รหัสนี้จะสร้างไฟล์ใน UTF-8 โดยไม่มี BOM


คำถามเกี่ยวกับการเข้ารหัสขณะบันทึกไฟล์ซอร์สโค้ดใน IDE ไม่เกี่ยวกับการตั้งค่าการเข้ารหัสขณะเขียนไฟล์บางไฟล์ในรหัส C # #
4321
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.