Excel เป็น CSV พร้อมการเข้ารหัส UTF8 [ปิด]


607

ฉันมีไฟล์ Excel ที่มีอักขระภาษาสเปน (ตัวหนอนเป็นต้น) ที่ฉันต้องแปลงเป็นไฟล์ CSV เพื่อใช้เป็นไฟล์นำเข้า อย่างไรก็ตามเมื่อฉันบันทึกเป็น CSV มันจะรวมตัวอักษรสเปน "พิเศษ" ที่ไม่ใช่ตัวอักษร ASCII ดูเหมือนว่าจะทำเช่นนี้ด้วยเครื่องหมายคำพูดซ้ายและขวาและเครื่องหมายขีดกลางยาวที่ปรากฏว่ามาจากผู้ใช้ดั้งเดิมที่สร้างไฟล์ Excel ใน Mac

เนื่องจาก CSV เป็นเพียงไฟล์ข้อความฉันแน่ใจว่ามันสามารถจัดการการเข้ารหัส UTF8 ได้ดังนั้นฉันจึงเดาว่ามันเป็นข้อ จำกัด ของ Excel แต่ฉันกำลังมองหาวิธีที่จะได้รับจาก Excel เป็น CSV และเก็บอักขระที่ไม่ใช่ ASCII ครบถ้วน


15
ฉันเห็นคำถามนั้นก่อนโพสต์ แต่เป็นเรื่องเกี่ยวกับการมี UTF8 CSV แล้วและเปิดใน Excel ไม่ใช่วิธีอื่น
Jeff Treuting

7
คำตอบด้านล่างดูเหมือนจะใช้ได้ แต่เป็นเพียงวิธีการแก้ปัญหา ไม่มีใครรู้วิธีทำให้ Excel ทำเช่นนี้?
NielW

2
ฉันต้องการที่จะลดลง 2 เซ็นต์ของฉัน: หลังจากการทดลองและข้อผิดพลาดจำนวนมากพยายามที่จะใช้ฟังก์ชั่น VBA ฯลฯ ... (ฉันใช้ Excel 97 ด้วยเหตุผลต่างๆ) ... เพียงแค่บันทึกเป็น "CSV (MSDOS)" รูปแบบ "แก้ไขปัญหานี้ให้ฉันได้ ในกรณีของฉัน Citrix webinar (GotoWebinar) ข้อมูล CSV จบลงด้วยตัวอักษรเพื่อแบ่งรหัส Apex บางส่วนในตอนท้ายของเรา - การบันทึกเป็น "CSV (MSDOS)" ช่วยฉัน (ก่อนหน้านี้) โหลดการส่งออก CSV ลงใน Notepad ++ และวางลงใน UTF- 8 ไฟล์เปล่าและบันทึกใหม่ :-P :-)
AMM

2
นี่เป็นข้อ จำกัด ของ Excel ที่น่ารำคาญมาก ผมเปิดคำขอคุณลักษณะ UserVoice เกี่ยวกับเรื่องนี้: excel.uservoice.com/forums/...รู้สึกอิสระที่จะลงคะแนนเสียงและทำให้มันเกิดขึ้น
Doron Yaacoby

7
ตาม uservoice ของ Excel, Microsoft เริ่มทำงานกับ UTF-8 สำหรับ. csv เมื่อเดือนที่แล้วexcel.uservoice.com/forums/ …
moloko

คำตอบ:


405

วิธีแก้ปัญหาง่ายๆคือใช้ Google Spreadsheet วาง (ค่าเฉพาะเมื่อคุณมีสูตรที่ซับซ้อน) หรือนำเข้าแผ่นงานจากนั้นดาวน์โหลด CSV ฉันลองตัวละครสองสามตัวและใช้งานได้ดี

หมายเหตุ: Google ชีตมีข้อ จำกัด เมื่อนำเข้า ดูที่นี่

หมายเหตุ: ระวังข้อมูลที่ละเอียดอ่อนด้วย Google ชีต

แก้ไข: ทางเลือกอื่น - โดยพื้นฐานแล้วพวกเขาใช้มาโคร VB หรือ addins เพื่อบังคับให้บันทึกเป็น UTF8 ฉันไม่ได้ลองใช้วิธีแก้ไขปัญหาใด ๆ แต่ก็ฟังดูสมเหตุสมผล


63
บางทีอาจจะเป็นโจเอล Slotsky (อดีตนายกของ Excel) สามารถที่จะส่งพวกเขาเขาทศวรรษเก่าโพสต์บนแน่นอนทุกขั้นต่ำของผู้พัฒนาซอฟท์แวแน่นอนบวกต้องทราบเกี่ยวกับ Unicode และตัวละครชุด ?
ผ่อนผัน

8
ด้วยแผ่นจดบันทึก Windows ปกติ (ใช้บันทึกเป็นแล้วเลือก utf-8 ในตัวเลือกการเข้ารหัส) ได้ผลสำหรับฉัน สำหรับฉันนั่นเป็นวิธีที่ดีที่สุดสำหรับฉันเนื่องจากต้องทำโดยผู้ใช้ที่ไม่มีสิทธิ์ของผู้ดูแลระบบในเครื่องของพวกเขาดังนั้นจึงไม่จำเป็นต้องติดตั้งซอฟต์แวร์เพิ่มเติม
Fer

9
OpenOffice JustWorks (tm) โดยไม่ยุ่งยาก - ฉันคิดว่ามันควรจะรวมอยู่ด้วย
Rbjz

9
uhhh ฉันเพิ่งมีอาการสั่นหลังของฉัน เกิดอะไรขึ้นถ้าไฟล์ excel ของคุณมี 200,000 บรรทัด? หรือมีข้อมูลที่ละเอียดอ่อนที่คุณไม่ต้องการรวมไว้ในสเปรดชีต excel? ใช้ Openoffice / Libreoffice หากคุณต้องการ
Seb

2
เกิดอะไรขึ้นถ้าขนาดไฟล์ใหญ่? แผ่น Goolge มีขนาด จำกัด ประมาณ 75M ถ้าฉันจำได้อย่างถูกต้อง ฉันมีไฟล์คือ 700M
News_is_Selection_Bias

133

ฉันพบแอพพลิเคชั่นสเปรดชีตOpenOfficeของ Calc ดีมากในการจัดการข้อมูล CSV

ในช่องโต้ตอบ "บันทึกเป็น ... " คลิก "ตัวเลือกรูปแบบ" เพื่อรับการเข้ารหัสที่แตกต่างกันสำหรับ CSV LibreOfficeทำงานในลักษณะเดียวกับ AFAIK

กล่องโต้ตอบบันทึก calc


ฉันแน่ใจว่าใช้งานได้ฉันไม่ได้มี OpenOffice อยู่แล้วดังนั้น Google เอกสารจึงง่ายขึ้นในสถานการณ์ของฉัน แต่ขอบคุณสำหรับคำแนะนำ
Jeff Treuting

19
OpenOffice Calc มีตัวเลือกมากขึ้นและดีขึ้นเมื่อเปิดและบันทึกไฟล์ "CSV" (ตัวคั่นฟิลด์การเข้ารหัส ฯลฯ ) กว่าทั้ง Google เอกสารและ Excel นอกจากนี้ปัจจุบัน Google เอกสารยังทนทุกข์ทรมานจากขีด จำกัด 400,000 เซลล์ต่อสเปรดชีตซึ่ง OpenOffice Calc ไม่ได้
Christian Davén

3
ฉันสามารถยืนยัน LibreOffice ได้ด้วย: มันมีตัวเลือกการเข้ารหัสอักขระในการส่งออกที่ขาดความเศร้าใน Excel
Rupert Rawnsley

1
นี่เป็นตัวเลือกที่ยอดเยี่ยมสำหรับผู้ที่ทำงานกับข้อมูลที่ละเอียดอ่อน ชุด OpenOffice สามารถติดตั้งแบบพกพาสำหรับผู้ที่มีเครื่องล็อค
นาธาน

119
  1. บันทึกแผ่นงาน Excel เป็น "Unicode Text (.txt)" ข่าวดีก็คือว่าตัวละครนานาชาติทั้งหมดอยู่ใน UTF16 (หมายเหตุไม่ใช่ใน UTF8) อย่างไรก็ตามไฟล์ "* .txt" ใหม่เป็นตัวคั่น TAB ไม่ใช่ตัวคั่นด้วยเครื่องหมายจุลภาคดังนั้นจึงไม่ใช่ CSV ที่แท้จริง

  2. (ไม่บังคับ) หากคุณไม่สามารถใช้ไฟล์ที่คั่นด้วย TAB เพื่อนำเข้าให้ใช้โปรแกรมแก้ไขข้อความที่คุณโปรดปรานและแทนที่อักขระ TAB ด้วยเครื่องหมายจุลภาค ","

  3. นำเข้าไฟล์ * .txt ของคุณในแอปพลิเคชันเป้าหมาย ตรวจสอบให้แน่ใจว่าสามารถยอมรับรูปแบบ UTF16 ได้

หาก UTF-16 ได้รับการติดตั้งอย่างถูกต้องด้วยการสนับสนุนสำหรับจุดโค้ดที่ไม่ใช่ BMP คุณสามารถแปลงไฟล์ UTF-16 เป็น UTF-8 โดยไม่สูญเสียข้อมูล ฉันปล่อยให้คุณค้นหาวิธีที่คุณโปรดปรานในการทำเช่นนั้น

ฉันใช้ขั้นตอนนี้เพื่อนำเข้าข้อมูลจาก Excel ไปยัง Moodle


5
ในที่สุดสิ่งที่ใช้งานได้! ลองใช้ตัวเลือก Excel ด้านบนใน Excel 2013 โดยไม่ประสบความสำเร็จ ฉันเพิ่งเปลี่ยนไปใช้ \ t เป็นตัวละครแยกเมื่อแยกวิเคราะห์มันใช้งานได้ดี!
Mattias Lindberg

1
จำเป็นต้องส่งออก XLS เป็น CSV เพื่อนำเข้าใน MySQL ใช้ Excel 2003 ฉันส่งออกในรูปแบบ "Unicode Text (.txt)" จากนั้นใช้ Notepad ++ เพื่อแทนที่ TAB ด้วย;จากนั้นอิมพอร์ตไฟล์ txt ไปยัง phpmyadmin ด้วย "ชุดอักขระของไฟล์: utf-8", Format "CSV กำลังใช้โหลดข้อมูล " การเข้ารหัสทั้งหมดถูกถ่ายโอนอย่างถูกต้อง
Kai Noack

3
ขอบคุณ. มันสมเหตุสมผลแล้ว ทำไม MS ยังคงปฏิเสธที่จะใช้ UTF เป็นมาตรฐานในการตีฉัน
Oskar Limka

4
@OskarLimka: เมื่อคุณพูดว่า "UTF" คุณหมายถึง UTF-8 หรือ UTF-16 หรือไม่ เพราะ Microsoft ใช้ UTF-16 ค่อนข้างน้อย
Flimm

7
"ข่าวดีก็คือว่าตัวละครนานาชาติทั้งหมดอยู่ใน UTF16 (หมายเหตุไม่ใช่ใน UTF8)" : เรื่องไร้สาระสมบูรณ์ UTF-8 และ UTF-16 เป็นสองวิธีในการเข้ารหัสชุดโค้ด Unicode ทั้งหมด

43

ฉันรู้ว่านี่เป็นคำถามเก่า แต่เกิดขึ้นกับคำถามนี้ในขณะที่ดิ้นรนกับปัญหาเดียวกันกับ OP

ไม่พบวิธีแก้ไขปัญหาใด ๆ ที่เสนอเป็นตัวเลือกฉันจะเริ่มค้นหาว่ามีวิธีการเพียงแค่ใช้ Excel

โชคดีที่ฉันพบว่าปัญหาตัวละครที่หายไปเกิดขึ้นเท่านั้น (ในกรณีของฉัน) เมื่อบันทึกจากรูปแบบ xlsx เป็นรูปแบบ csv ฉันพยายามบันทึกไฟล์ xlsx ไปที่ xls ก่อนจากนั้นไปที่ csv มันใช้งานได้จริง

โปรดลองและดูว่าเหมาะกับคุณหรือไม่ โชคดี.


3
สำหรับผมใน Excel สำหรับ Mac 2011 งานนี้ Windows comma separated (CSV)แต่ถ้าฉันเลือก มันใช้งานไม่ได้หากฉันใช้ตัวเลือกเริ่มต้นหรือตัวเลือก DOS CSV ทั้งสองตัวนี้แทนที่อักขระเน้นเสียงด้วยอักขระขยะแบบสุ่ม การทดสอบสำหรับตัวอักษรรวมทั้งé, è, â... ไม่ทราบว่าเป็น UTF8 จริง แต่ตัวละครไม่ได้ mangled
user56reinstatemonica8

12
การยืนยันอย่างรวดเร็ว - ไฟล์ที่สร้างด้วยวิธีนี้ใน (Excel สำหรับ Mac 2011) ไม่ได้ผลิต UTF-8 csvs แต่จะสร้างไฟล์ CSV ที่อย่างน้อยมีอักขระที่ถูกต้องและสามารถแปลงเป็น UTF8ได้อย่างไม่ลำบากในโปรแกรมแก้ไขข้อความซึ่งเป็นขั้นตอนใหญ่ไปข้างหน้าจากขยะ mangled น่าหัวเราะที่ Excel พ่นออกโดยค่าเริ่มต้น
user56reinstatemonica8

ใช่เห็นด้วยสิ่งนี้ใช้ได้กับฉันเช่นกัน (Excel Mac 2011) และสมควรได้รับการอัปโหลดมากขึ้น
cbmanica

1
สิ่งนี้ไม่ได้ผลสำหรับฉัน (ใช้ Excel 2007) ฉันมีอักขระที่ไม่ใช่ ASCII 2 ตัวในไฟล์ของฉันและหนึ่งในนั้นถูกบันทึกตกลงด้วยวิธีนี้ส่วนอีกอันไม่ใช่
EM0

1
โปรดทราบว่าไฟล์ CSV ที่ได้จะเป็น UTF-16 ไม่ใช่ UTF-8 ตามที่ถาม
Flimm

38

คุณสามารถใช้คำสั่งiconvภายใต้ Unix (ใช้ได้ใน Windows เป็นlibiconv )

หลังจากบันทึกเป็น CSV ภายใต้ Excel ในบรรทัดคำสั่งแล้ว:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv

(อย่าลืมแทนที่ cp1250 ด้วยการเข้ารหัสของคุณ)

ทำงานได้อย่างรวดเร็วและยอดเยี่ยมสำหรับไฟล์ขนาดใหญ่เช่นฐานข้อมูลรหัสไปรษณีย์ซึ่งไม่สามารถนำเข้าสู่ GoogleDocs (จำกัด จำนวนเซลล์ 400,000 เซลล์)


5
นั่นคือไม่มีประโยชน์หากเนื้อหาของคุณมีอักขระที่ไม่สามารถเข้ารหัสใน 1250 วิธีที่ดีกว่าคือการส่งออกเป็น "Unicode .txt" ใน Excel และใช้ iconv เพื่อแปลงจาก Utf16 อาจทำsedหรือtrแปลจาก '\ t' เป็น ','
Sebastian

5
ดูเหมือนว่าการเข้ารหัสเริ่มต้นของ Excel จะเป็น CP858 เมื่อบันทึกเป็น CSV หรือ MS-DOS CSV และ Windows 1252 เมื่อบันทึกเป็น Windows CSV (ทดสอบใน Excel สำหรับ Mac 2011)
claymation

4
ฉันยอมรับอย่างสมบูรณ์ว่าสิ่งนี้ไร้ประโยชน์เช่นเดียวกับเมื่อ Excel บันทึกในรูปแบบ. csv ข้อมูลจะสูญเสียเมื่อมาถึงจุดโค้ด Unicode ที่ไม่สามารถเข้ารหัสในการเข้ารหัสแบบไบต์ต่อจุดโค้ด
Flimm

26

คุณสามารถทำได้บนเครื่อง Windows ที่ทันสมัยโดยไม่ต้องใช้ซอฟต์แวร์ของบุคคลที่สาม วิธีนี้มีความน่าเชื่อถือและจะจัดการข้อมูลที่มีเครื่องหมายจุลภาคที่ยกมา, อักขระแท็บที่ยกมา, ตัวอักษร CJK, ฯลฯ

1. บันทึกจาก Excel

ใน Excel ให้บันทึกข้อมูลเพื่อfile.txtใช้งานประเภทนั้นUnicode Text (*.txt)นั้น

2. เริ่ม PowerShell

วิ่ง powershellจากเมนูเริ่ม

3. โหลดไฟล์ใน PowerShell

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. บันทึกข้อมูลเป็น CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation

2
วิธีนี้ใช้ได้ดีกับไฟล์ CSV ที่มีมากกว่า 15,000 เรคคอร์ดโดยมีบรรทัดที่มีความยาวเกิน 1024 อักขระที่กำหนดโดย Notepad ใช้เวลาไม่กี่วินาทีและไม่ใช้ซอฟต์แวร์ของบุคคลที่สาม ขอบคุณ!
สัมบูรณ์

อ๊ะแม้ว่าฉันจะลองใช้ Google ชีตฉันก็เจอปัญหาเดียวกัน ดังนั้นกลยุทธ์ PowerShell นี้อาจใช้ได้ นี่คือปัญหาของฉัน สำหรับตัวละครบางตัวเช่นอีโมจิบางตัวคุณต้องใช้CHARACTER SET utf8mb4ตามที่อธิบายไว้ที่นี่: stackoverflow.com/a/10959780/470749
Ryan

1
@ Ryan นั่นเป็นปัญหาเฉพาะของ MySQL ฉันลองตัวละครที่เป็นปัญหาในคำถามนั้นและมันก็ใช้ได้ดีทั้งใน Excel และ PowerShell
Don Cruickshank

24

"วิธีง่าย ๆ " เพียงอย่างเดียวในการทำเช่นนี้คือ ก่อนอื่นให้ตระหนักว่ามีความแตกต่างระหว่างสิ่งที่ปรากฏกับสิ่งที่ถูกซ่อนอยู่ในไฟล์ Excel. csv

  1. เปิดไฟล์ Excel ที่คุณมีข้อมูล (.xls, .xlsx)
  2. ใน Excel เลือก "CSV (คั่นด้วยเครื่องหมายจุลภาค) (* .csv) เป็นประเภทไฟล์และบันทึกเป็นประเภทนั้น
  3. ใน NOTEPAD (อยู่ใต้ "โปรแกรม" จากนั้นคลิกเบ็ดเตล็ดในเมนูเริ่ม) เปิดไฟล์. csv ที่บันทึกไว้ใน Notepad
  4. จากนั้นเลือก -> บันทึกเป็น ... และที่ด้านล่างของช่อง "บันทึกเป็น" จะมีช่องเลือกที่ระบุว่า "เข้ารหัส" เลือก UTF-8 (อย่าใช้ ANSI หรือเสียสำเนียงอื่น ๆ ทั้งหมด) หลังจากเลือก UTF-8 แล้วให้บันทึกไฟล์เป็นชื่อไฟล์ที่แตกต่างกันเล็กน้อยจากต้นฉบับ

ไฟล์นี้อยู่ใน UTF-8 และเก็บอักขระและเสียงทั้งหมดและสามารถนำเข้าตัวอย่างเช่นลงใน MySQL และโปรแกรมฐานข้อมูลอื่น ๆ

คำตอบนี้นำมาจากฟอรั่มนี้


9
สิ่งนี้ไม่ถูกต้องเนื่องจากขั้นตอนที่ 2 บันทึกเป็น CSV ปัญหานี้คือ Excel บันทึกไฟล์ CSV ใน cp1252 ซึ่งเป็นการเข้ารหัสแบบหนึ่งไบต์ต่อรหัสจุด สิ่งนี้นำไปสู่การสูญเสียข้อมูลของตัวละครที่ไม่สามารถบรรจุได้หนึ่งไบต์
Flimm

มันใช้งานได้สำหรับฉัน แต่ฉันไม่เข้าใจว่าทำไม ไฟล์ของฉันที่สร้างขึ้นโดยจาวาสคริปต์นั้นจะอ่านอย่างไม่ถูกต้องใน excel (เช่นการเข้ารหัสที่แตกต่างกัน) แต่เมื่อฉันเปิดใน notepad และบันทึกเป็น utf-8 มันใช้งานได้ดี! ดังนั้นดูเหมือนว่าจะมีข้อมูลเมตาที่มีการเข้ารหัส มันทำงานอย่างไร? หาก Notepad สามารถบันทึกไฟล์ UTF-8 CSV และ Excel สามารถอ่านได้โปรแกรมของฉันสามารถสร้างไฟล์ CSV UTF-8 ที่ถูกต้องซึ่ง Excel สามารถอ่านได้หรือไม่
felipeaf

ทำงานให้ฉัน ใน XSLX ที่แปลงจาก Access รูปแบบการออกเสียงและ LF เท่านั้นและ ISO วันที่ตกลงทั้งหมด อย่างใดอย่างหนึ่งไม่ทำงานกับโซลูชันยอดนิยม
RolfBly

21

อีกสิ่งหนึ่งที่ฉันพบว่ามีประโยชน์: " ตัวเลข " อนุญาตให้เข้ารหัส - การตั้งค่าเมื่อบันทึกเป็น CSV


8
^ เป็นแอปพลิเคชั่นใน Mac OSX
Sruit A.Suk

ระวังด้วย Numbers เพราะมันมีข้อ จำกัด ในจำนวนแถวและฉันได้ทำการแปลงข้อมูลเช่นนี้ก่อนที่จะไม่รู้ว่ามันถูกครอบตัดบางส่วน Excel / CSV มีข้อ จำกัด ที่สูงกว่ามาก
MrE

14

"nevets1219" นั้นถูกต้องเกี่ยวกับ Google เอกสารอย่างไรก็ตามหากคุณเพียงแค่ "นำเข้า" ไฟล์นั้นมักจะไม่แปลงเป็น UTF-8

แต่ถ้าคุณนำเข้า CSV ลงในสเปรดชีต Google ที่มีอยู่มันจะแปลงเป็น UTF-8

นี่คือสูตร:

  • ในหน้าจอเอกสารหลัก (หรือไดรฟ์) ให้คลิกปุ่ม "สร้าง" และเลือก "สเปรดชีต"
  • จากเมนู "ไฟล์" เลือก "นำเข้า"
  • คลิก "เลือกไฟล์"
  • เลือก "แทนที่สเปรดชีต"
  • เลือกอักขระที่คุณใช้เป็นตัวแยก
  • คลิก "นำเข้า"
  • จากเมนู "ไฟล์" เลือก "ดาวน์โหลดเป็น" -> CSV (แผ่นงานปัจจุบัน)

ไฟล์ผลลัพธ์จะเป็น UTF-8


2
ปัญหาของคำตอบนี้คือวิธีที่คุณสร้างไฟล์ CSV ตั้งแต่แรก หากคุณทำได้โดยการบันทึกเป็น CSV ใน Excel อย่างง่ายดายไฟล์ CSV จะอยู่ใน cp1252 ซึ่งเป็นการเข้ารหัสแบบหนึ่งไบต์ต่อหนึ่งรหัสจุด สิ่งนี้จะนำไปสู่การสูญเสียข้อมูลเมื่อพูดถึงตัวละครที่ไม่สามารถบรรจุได้หนึ่งไบต์
Flimm

นั่นเป็นปัญหาของคำตอบเหล่านี้ และจะอยู่กับคำตอบของวิธีการแปลงเป็น UTF-8 เนื่องจากไม่มีวิธีรู้หรือควบคุมการเข้ารหัสดั้งเดิม
RedYeti

1
บางคำตอบพูดคุยเกี่ยวกับวิธีแก้ไขปัญหาดังกล่าวเช่นstackoverflow.com/a/15500052/247696
Flimm

13

ใช้ Notepad ++

การดำเนินการนี้จะแก้ไขไฟล์ CSV ที่เสียหายที่บันทึกโดย Excel และบันทึกอีกครั้งในการเข้ารหัสที่เหมาะสม

  • ส่งออก CSV จาก Excel
  • โหลดเข้า Notepad ++
  • แก้ไขการเข้ารหัส
  • บันทึก

Excel บันทึกใน CP-1252 / Windows-1252 เปิดไฟล์ CSV ใน Notepad ++ เลือก

Encoding > Character Sets > Western European > Windows-1252

แล้วก็

Encoding > Convert to UTF-8
File > Save

ก่อนอื่นให้บอกการเข้ารหัส Notepad ++ จากนั้นแปลง คำตอบอื่น ๆ เหล่านี้กำลังแปลงโดยไม่ต้องตั้งค่าการเข้ารหัสที่เหมาะสมก่อน mangling ไฟล์มากยิ่งขึ้น พวกเขาจะกลายเป็นสิ่งที่ควรจะเข้าไป หากตัวละครของคุณไม่พอดีกับ CP-1252 แสดงว่ามันหายไปแล้วเมื่อถูกบันทึกเป็น CSV ใช้คำตอบอื่นสำหรับสิ่งนั้น


ฉันอาจจะผิด แต่คุณไม่สามารถบันทึกไฟล์เป็น ".csv" ใน Notepad ++ และนั่นคือสิ่งที่เกี่ยวกับ
Daniel Maurer

1
ใช่คุณสามารถ. คุณเป็นเพียงแค่การบันทึกไฟล์ข้อความและ.csvเป็นไฟล์ข้อความ คำตอบนี้จะเปิดไฟล์ CSV ที่เสียหายโดย Excel แก้ไขแล้วบันทึกอีกครั้งด้วยการเข้ารหัสที่เหมาะสม
Chloe

สิ่งที่คุณกำลังติดต่อสื่อสารนั้นส่งผลกระทบอย่างมากมาย ใช้วิธีการที่โดดเด่นนี้เราสามารถบรรลุคุณภาพข้อมูลที่สูงขึ้น! ไชโย! (คำถาม: ทำไมความคิดเห็นนี้แปลกเหรอ?)
thymaro

9

ภายใต้ Excel 2016 ขึ้นไป (รวมถึง Office 365) มีตัวเลือก CSV สำหรับรูปแบบ UTF-8 โดยเฉพาะ

ใน Office 365 ให้ทำบันทึกเป็น; ซึ่งก่อนหน้านี้หนึ่งอาจเลือก CSV (คั่นด้วยเครื่องหมายจุลภาค) ตอนนี้หนึ่งในประเภทไฟล์ที่คุณสามารถบันทึกได้เช่นเดียวกับCSV UTF-8 (คั่นด้วยเครื่องหมายจุลภาค) (* .csv)


1
คุณควรให้คำแนะนำเกี่ยวกับวิธีการใช้ตัวเลือกนั้น
rovyko

1
@dexgecko แน่ใจว่า: เรียกว่าปุ่ม / เมนู "บันทึก" ขณะนี้มีการส่งออก CSV สี่ประเภทใน Excel 2016 บน Windows: CSVบันทึกเป็น "ANSI" (มากกว่าหรือน้อยกว่าเทียบเท่า Latin1 แต่อาจแตกต่างกับการติดตั้งระบบปฏิบัติการที่ไม่ใช่แบบตะวันตกฉันไม่แน่ใจ) UTF-8 CSVบันทึกเป็น UTF-8 พร้อม BOM, CSV (DOS) บันทึกเป็น CP850 (อีกครั้ง, mais ขึ้นอยู่กับการติดตั้ง?) และ CSV (Mac) บันทึกเป็น MacRoman

อย่างไรก็ตาม Excel จะสามารถอ่านไฟล์ UTF-8 และ ANSI CSV เท่านั้น (Excel สามารถใช้ BOM เพื่อเลือก) หากต้องการนำเข้าจากการเข้ารหัสอื่นให้เปลี่ยนชื่อเป็น. txt เปิดจาก Excel (คุณมีรายการการเข้ารหัสที่มีให้เลือกมากมาย) และเนื่องจากมันจะไม่ตีความตัวคั่นอย่างถูกต้องให้ใช้ปุ่ม "แปลง" เพื่อแยกแถว คุณยังสามารถใช้เคล็ดลับนี้เมื่อนำเข้า CSV จากการประชุมภาษาอื่น (ในภาษาฝรั่งเศสเช่นตัวคั่นที่ยื่นเป็นเซมิโคลอนเนื่องจากเครื่องหมายจุลภาคถูกใช้เป็นตัวคั่นทศนิยมแล้ว)

1
@ Jean-ClaudeArbaut แปลกฉันไม่เห็นตัวเลือก UTF-8 CSV ใน Excel 2016 ของฉัน
rovyko

1
@dexgecko แปลกจริง ๆ ตามหน้านี้ (เป็นภาษาฝรั่งเศส, ขอโทษ), ฟังก์ชั่นถูกเพิ่มเข้ามาในเดือนพฤศจิกายน 2559, ในรุ่นบิลด์ 1610 ตอนนี้ฉันมีรุ่น 1802 แล้ว อย่างไรก็ตามฉันคิดว่ามีเพียง Office 365 เท่านั้นที่มีวิวัฒนาการดังกล่าวและฉันใช้ Office Pro 2016 (ไม่ใช่รสชาติ 365) อาจลองอัปเดต Office ของคุณ

8

สำหรับผู้ที่มองหาโซลูชัน (หรืออย่างน้อยฝั่งเซิร์ฟเวอร์) แบบเป็นโปรแกรมทั้งหมดฉันประสบความสำเร็จอย่างมากในการใช้เครื่องมือ xls2csv ของ catdoc

ติดตั้ง catdoc:

apt-get install catdoc

ทำการแปลง:

xls2csv -d utf-8 file.xls > file-utf-8.csv 

เห็นได้อย่างรวดเร็ว

โปรดทราบว่ามันเป็นสิ่งสำคัญที่คุณรวมถึง-d utf-8ธงมิฉะนั้นมันจะเข้ารหัสเอาท์พุทในการเริ่มต้นcp1252เข้ารหัสและคุณเสี่ยงต่อการสูญเสียข้อมูล

โปรดทราบว่าxls2csvยังใช้งานได้กับ.xlsไฟล์เท่านั้น แต่จะไม่ทำงานกับ.xlsxไฟล์


หรือเลือกการเข้ารหัสเอาต์พุตอื่นไม่สามารถแก้ไขปัญหาของทุกคนด้วยคำตอบเดียว :-)
mpowered

2
ฉันรู้ว่ามันโชคร้าย แต่ความจริงก็คือคำตอบนี้จะทำให้เกิดปัญหาสำหรับผู้ใช้บางคน ความจริงที่ว่าคุณเคยเรียกใช้ตัวละครนี้ใน cp1252 นั้นโชคดีมากคุณไม่ได้รับคำเตือนเกี่ยวกับความเสี่ยงนี้ในคำตอบคุณแค่บอกว่ามัน "ใช้ได้โดยไม่ต้องผูกปม" คุณไม่ได้รับการขอให้แก้ไขปัญหาของทุกคนเพียงแค่ OP ซึ่งมีผู้คนจำนวนมากแบ่งปัน
Flimm

1
ไปแล้วฉันได้แก้ไขปัญหาในโพสต์คำตอบและลบ downvote
Flimm

7

เกี่ยวกับการใช้ Powershell

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8

1
ข้อความของอักขระภาษาสเปนที่ไม่ใช่ ASCII จะถูกเปลี่ยนจากอักขระภาษาสเปนดั้งเดิมเป็นสตริงการเข้ารหัสที่ ANSI ใช้ ดังนั้นข้อความจะไม่เหมือนกับต้นฉบับ
เจสันวิลเลียมส์

7

วิธีที่ง่ายที่สุด: ไม่จำเป็นต้องเปิดสำนักงานและ Google เอกสาร

  1. บันทึกไฟล์ของคุณเป็น "Unicode text file";
  2. ตอนนี้คุณมีไฟล์ข้อความ Unicode
  3. เปิดด้วย "notepad" และ "บันทึกเป็น" ด้วยการเลือก "utf-8" หรือหน้ารหัสอื่น ๆ ที่คุณต้องการ
  4. เปลี่ยนชื่อนามสกุลไฟล์จาก "txt" เป็น "csv" สิ่งนี้จะส่งผลให้เป็นไฟล์ UTF-8 csv ที่คั่นด้วยแท็บ
  5. หากคุณต้องการไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคให้เปิดcsvไฟล์ที่คุณเพิ่งเปลี่ยนชื่อและแทนที่แท็บทั้งหมดด้วยเครื่องหมายจุลภาค การทำเช่นนี้ใน Notepad บน Win 10 Ctrl+Hเพียงแค่เลือกข้อมูลแท็บหนึ่งแล้วคลิก ในหน้าต่างที่เปิดขึ้นให้พิมพ์เครื่องหมายจุลภาค,ในฟิลด์ "แทนที่ด้วย" แล้วคลิก "แทนที่ทั้งหมด" บันทึกไฟล์ของคุณ ผลลัพธ์จะเป็นไฟล์ UTF-8 ที่คั่นด้วยเครื่องหมายจุลภาค

อย่าเปิดด้วย MS-Office ต่อไป !!! ตอนนี้คุณมีไฟล์ CSV ที่คั่นด้วยแท็บ หรือคั่นด้วยจุลภาคถ้าคุณใช้หมายเลขขั้นตอนที่ 5


2
สำหรับไฟล์ที่คั่นด้วยแท็บอาจเป็นการดีกว่าถ้าจะใช้.txtส่วนขยาย csvเช่นไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคเป็นเพียงความสับสน
dof1985

5

ตลกอย่างที่เห็นวิธีที่ง่ายที่สุดที่ฉันพบในการบันทึกสเปรดชีต 180MB ของฉันลงในไฟล์ UTF8 CSV คือการเลือกเซลล์ลงใน Excel คัดลอกและวางเนื้อหาของคลิปบอร์ดลงใน SublimeText


1
สิ่งนี้ใช้งานได้เนื่องจาก Excel มีตัวเลือกเวอร์ชันTSVผ่านคลิปบอร์ด คุณสามารถใช้ Notepad แทน SublimeText ได้อย่างเท่าเทียมกัน แต่อย่าลืมบันทึกด้วยการเข้ารหัส UTF-8 ถ้าคุณทำ!
Don Cruickshank

3

ฉันไม่พบวิธีแก้ปัญหา VBA สำหรับปัญหานี้ใน Mac Excel ดูเหมือนจะไม่มีวิธีการส่งออกข้อความ UTF-8

ดังนั้นในที่สุดฉันก็ต้องยอมแพ้กับ VBA, ยิงกระสุนและเรียนรู้ AppleScript มันไม่ได้เลวร้ายอย่างที่คิด

โซลูชันอธิบายไว้ที่นี่: http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html


3

สมมติว่าเป็นสภาพแวดล้อม Windows บันทึกและทำงานกับไฟล์ตามปกติใน Excel แต่จากนั้นเปิดไฟล์ Excel ที่บันทึกไว้ใน Gnome Gnumeric (ฟรี) บันทึกสเปรดชีตของ Gnome Gnumeric เป็น CSV ซึ่ง - สำหรับฉันแล้ว - บันทึกเป็น UTF-8 CSV


3

วิธีง่ายๆในการทำ: ดาวน์โหลด open office ( ที่นี่ ) โหลดสเปรดชีตและเปิดไฟล์ excel ( .xlsหรือ.xlsx) จากนั้นเพียงบันทึกเป็นไฟล์ CSV ข้อความและหน้าต่างจะเปิดขึ้นเพื่อขอให้รักษารูปแบบปัจจุบันหรือเพื่อบันทึกเป็นรูปแบบ. ODF เลือก "คงรูปแบบปัจจุบัน" และในหน้าต่างใหม่เลือกตัวเลือกที่ใช้งานได้ดีขึ้นสำหรับคุณตามภาษาที่ไฟล์ของคุณเขียน สำหรับภาษาสเปนเลือกยุโรปตะวันตก ( Windows-1252/ WinLatin 1) และไฟล์ใช้งานได้ดี หากคุณเลือก Unicode ( UTF-8) มันจะไม่ทำงานกับอักขระภาษาสเปน


3
ไม่มีเหตุผลใดที่ UTF-8 จะไม่ทำงานกับอักขระภาษาสเปน
Flimm

3
  1. บันทึกไฟล์ xls (ไฟล์ Excel) เป็น Unicode text => ไฟล์จะถูกบันทึกในรูปแบบข้อความ (.txt)

  2. เปลี่ยนรูปแบบจาก. txt เป็น. csv (เปลี่ยนชื่อไฟล์จาก XYX.txt เป็น XYX.csv


3
สิ่งนี้ไม่ทำงานเนื่องจากคำแนะนำของคุณไม่มีขั้นตอนที่จำเป็นในการแปลงแท็บเป็นเครื่องหมายจุลภาคในข้อมูลไฟล์
Matthew Rodatus

1
"Unicode text" ของ Excel คือ UTF-16 ไม่ใช่ UTF-8 ตามที่ถามในคำถาม
Flimm

3

ฉันเจอปัญหาเดียวกันแล้ว แต่ก็มีวิธีแก้ปัญหาที่ง่ายสำหรับเรื่องนี้

  1. เปิดไฟล์ xlsx ของคุณใน Excel 2016 หรือสูงกว่า
  2. ใน "บันทึกเป็น" เลือกตัวเลือกนี้: "(CSV UTF-8 (คั่นด้วยเครื่องหมายจุลภาค) *. csv)"

มันทำงานได้อย่างสมบูรณ์และไฟล์ csv ถูกสร้างขึ้นซึ่งสามารถนำเข้าในซอฟต์แวร์ใด ๆ ฉันนำเข้าไฟล์ csv นี้ในฐานข้อมูล SQLITE ของฉันและทำงานได้อย่างสมบูรณ์กับตัวอักษร unicode ทั้งหมด


ตัวเลือกนี้ไม่มีให้ในสำเนา Excel 2016 ของฉันคุณใช้เวอร์ชัน Office 365 หรือไม่
Don Cruickshank

2

มาข้ามปัญหาเดียวกันและ googled โพสต์นี้ ไม่มีข้อใดถูกเลยสำหรับฉัน ในที่สุดฉันก็แปลง Unicode .xls เป็น. xml (เลือกบันทึกเป็น ... XML Spreadsheet 2003) และสร้างอักขระที่ถูกต้อง จากนั้นฉันก็เขียนโค้ดเพื่อแยกวิเคราะห์ xml และแยกเนื้อหาสำหรับการใช้งานของฉัน


2

ฉันได้เขียนสคริปต์ Python ขนาดเล็กที่สามารถส่งออกแผ่นงานใน UTF-8

คุณเพียงแค่ต้องระบุไฟล์ Excel เป็นพารามิเตอร์แรกตามด้วยแผ่นงานที่คุณต้องการส่งออก หากคุณไม่ได้ให้แผ่นงานสคริปต์จะส่งออกแผ่นงานทั้งหมดที่มีอยู่ในไฟล์ Excel

#!/usr/bin/env python

# export data sheets from xlsx to csv

from openpyxl import load_workbook
import csv
from os import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_all_sheets(excel_file):
    sheets = []
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
        sheets.append(worksheet_name)
    return sheets

def csv_from_excel(excel_file, sheets):
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    for worksheet_name in sheets:
        print("Export " + worksheet_name + " ...")

        try:
            worksheet = workbook.get_sheet_by_name(worksheet_name)
        except KeyError:
            print("Could not find " + worksheet_name)
            sys.exit(1)

        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
        for row in worksheet.iter_rows():
            lrow = []
            for cell in row:
                lrow.append(cell.value)
            wr.writerow(lrow)
        print(" ... done")
    your_csv_file.close()

if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
else:
    sheets = []
    if len(sys.argv) == 3:
        sheets = list(sys.argv[2].split(','))
    else:
        sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_excel(sys.argv[1], sheets)

ฉันได้อัปเดตการใช้งานเล็กน้อยและสร้าง gist gist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
Julian

2

ปกติแล้ว Excel จะบันทึกไฟล์ csv เป็นการเข้ารหัส ANSI แทนที่จะเป็น utf8

ทางเลือกหนึ่งในการแก้ไขไฟล์คือใช้ Notepad หรือ Notepad ++:

  1. เปิด. csv ด้วย Notepad หรือ Notepad ++
  2. คัดลอกเนื้อหาไปยังคลิปบอร์ดคอมพิวเตอร์ของคุณ
  3. ลบเนื้อหาออกจากไฟล์
  4. เปลี่ยนการเข้ารหัสไฟล์เป็น utf8
  5. วางเนื้อหากลับจากคลิปบอร์ด
  6. บันทึกไฟล์

ไม่แน่ใจเกี่ยวกับ NP ++ รุ่นเก่า แต่ในรุ่นปัจจุบันคุณสามารถเลือกเข้ารหัส> แปลงเป็น UTF-8 แทนที่ขั้นตอนที่ 2-5
Felk

1

ตัวเลือกที่สองสำหรับ "nevets1219" คือการเปิดไฟล์ CSV ของคุณใน Notepad ++ และทำการแปลงเป็น ANSI

เลือกในเมนูด้านบน: การเข้ารหัส -> แปลงเป็น Ansi


ไม่มีความคิดว่าทำไมคุณถึงถูกลดระดับลง Notepad ++ ทำเพื่อฉัน ไม่สามารถจัดเก็บไฟล์ของฉันใน Google Spreadsheet เนื่องจากเป็นความลับ
Zane

3
ปัญหาของคำตอบนี้คือวิธีที่คุณสร้างไฟล์ CSV ตั้งแต่แรก หากคุณบันทึกเป็น CSV จาก Excel การเข้ารหัสจะเป็น cp1252 ซึ่งเป็นการเข้ารหัสแบบไบต์ต่อจุดโค้ดดังนั้นข้อมูลจะสูญเสียอักขระที่ไม่เหมาะสม ในตอนท้ายคุณควรแปลงเป็น UTF-8 และไม่ใช่ Ansi หากคุณต้องการทำสิ่งที่คำถามถาม
Flimm

นี่เป็นคำตอบที่ง่ายกว่ามากสำหรับ IMO ฉันใช้ Excel 2016 และพบว่าบันทึกลงในการเข้ารหัส ANSI ตามค่าเริ่มต้น แต่รับเป็น UTF-8 ซึ่งเป็นสิ่งที่ฉันต้องการ
rovyko

1

การเข้ารหัส -> แปลงเป็น Ansi จะเข้ารหัสใน ANSI / UNICODE Utf8 เป็นชุดย่อยของ Unicode บางทีใน ANSI จะถูกเข้ารหัสอย่างถูกต้อง แต่ที่นี่เรากำลังพูดถึง UTF8, @SequenceDigitale

มีวิธีที่เร็วกว่าเช่นการส่งออกเป็น csv (คั่นด้วยเครื่องหมายจุลภาค) จากนั้นเปิด csv ด้วย Notepad ++ (ฟรี) แล้วเข้ารหัส> แปลงเป็น UTF8 แต่ถ้าคุณต้องทำสิ่งนี้ครั้งละหนึ่งไฟล์ หากคุณต้องการเปลี่ยนและส่งออกอย่างเหมาะสมสิ่งที่ดีที่สุดคือโซลูชัน LibreOffice หรือ GDocs


5
"Utf8 เป็นชุดย่อยของ Unicode": ไม่มีเหตุผล UTF-8 เป็นการเข้ารหัส Unicode
jameshfisher

ฉันไม่แน่ใจว่าฉันจะพบตัวเลือก "เข้ารหัส -> แปลงเป็น Ansi" นี้
Flimm

เพียงแค่ ANSI csv ใน Notepad ++ และการเปลี่ยนการเข้ารหัสไฟล์เป็น utf8 ทำให้ตัวอักษรสเปนที่ไม่ใช่ ASCII ต้นฉบับถูกแปลงเป็นสตริงการเข้ารหัสซึ่งไม่ตรงกับข้อความต้นฉบับ
เจสันวิลเลียมส์

1

Microsoft Excel มีตัวเลือกในการส่งออกสเปรดชีตโดยใช้การเข้ารหัส Unicode ดูภาพหน้าจอต่อไปนี้

ป้อนคำอธิบายรูปภาพที่นี่


14
"Unicode Text" บันทึกใน UTF-16 LE (Little Endian) ไม่ใช่ใน UTF-8 ตามที่ถามโดย OP
ขวาน

ใช่ แต่เป็นวิธีที่ดีที่สุดในการรับการสนับสนุน Unicode สำหรับค่า x-separ-values ​​ของคุณใน Excel ฉันมีปัญหาทุกประเภทที่พยายามทำให้ Excel เล่นบอลด้วย UTF-8! อ่านเพิ่มเติม
mcNux

1

เปิด. csv ที่ดีกับ notepad ++ หากคุณเห็นว่าการเข้ารหัสของคุณนั้นดี (คุณเห็นอักขระทั้งหมดตามที่ควรจะเป็น) การเข้ารหัสแบบกดแล้วแปลงเป็น ANSI อื่น - ค้นหาการเข้ารหัสปัจจุบันของคุณ


ที่ใช้งานได้สำหรับฉัน .. มีปัญหากับตัวอักษรกรีกเมื่อส่งออก dbysql db เป็น csv และนำเข้าสู่ excel ..
ลัส

1
ปัญหานี้คือวิธีที่คุณสร้างไฟล์ CSV ในตอนแรก หากคุณเพียงแค่บันทึกเป็นไฟล์ CSV ใน Excel ไฟล์นั้นจะบันทึกใน cp1252 ซึ่งเป็นการเข้ารหัสแบบจุดต่อหนึ่งจุดต่อโค้ดดังนั้นจึงสูญเสียข้อมูล
Flimm

1

อีกวิธีคือการเปิดไฟล์ด้วย winword และบันทึกเป็น txt จากนั้นเปิดใหม่อีกครั้งโดย excel และมันจะทำงาน ISA


1

บันทึกไดอะล็อก> ปุ่มเครื่องมือ> ตัวเลือกเว็บ> แท็บการเข้ารหัส


มันไม่ได้ผลสำหรับฉัน วิธีที่ฉันเข้าใจว่าจะมีผลเฉพาะเมื่อบันทึกเป็นรูปแบบเว็บ (HTML เป็นต้น) ไม่ใช่เมื่อบันทึกเป็น CSV
jogojapan

ทำงานให้ฉัน - office 2007
Elia Weiss

ไม่ทำงานบน office 2010 เลือกโปรไฟล์ CSV ใด ๆ
ฮาร์ต

0

ฉันมีปัญหาเดียวกันและเจอการเพิ่มนี้และมันทำงานได้อย่างสมบูรณ์แบบใน excel 2013 ข้าง excel 2007 และ 2010 ที่พูดถึง

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