การเข้ารหัสใดที่เปิดไฟล์ CSV อย่างถูกต้องด้วย Excel ทั้ง Mac และ Windows


137

เรามีเว็บแอปที่ส่งออกไฟล์ CSV ที่มีอักขระต่างประเทศด้วย UTF-8 ไม่มี BOM ทั้งผู้ใช้ Windows และ Mac จะได้รับอักขระขยะใน Excel ฉันพยายามแปลงเป็น UTF-8 ด้วย BOM; Excel / Win ใช้ได้ด้วย Excel / Mac แสดงซึ่งพูดพล่อยๆ ฉันใช้ Excel 2003 / Win, Excel 2011 / Mac นี่คือการเข้ารหัสทั้งหมดที่ฉันพยายาม:

Encoding  BOM      Win                            Mac
--------  ---      ----------------------------   ------------
utf-8     --       scrambled                      scrambled
utf-8     BOM      WORKS                          scrambled
utf-16    --       file not recognized            file not recognized
utf-16    BOM      file not recognized            Chinese gibberish
utf-16LE  --       file not recognized            file not recognized
utf-16LE  BOM      characters OK,                 same as Win
                   row data all in first field

สิ่งที่ดีที่สุดคือ UTF-16LE กับ BOM แต่ CSV ไม่ได้รับการยอมรับเช่นนี้ ตัวคั่นฟิลด์เป็นเครื่องหมายจุลภาค แต่อัฒภาคไม่เปลี่ยนแปลงสิ่ง

มีการเข้ารหัสที่ใช้งานได้ในทั้งสองโลกหรือไม่?


1
ถ้าคุณใช้ UTF-16LE สำหรับข้อมูลฟิลด์ทั้งหมด แต่ใช้อักขระ 8 บิต / ASCII สำหรับเครื่องหมายจุลภาค จากบทความนี้ ( creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndEncodings ) Excel อาจตีความเครื่องหมายจุลภาค Unicode เป็นส่วนหนึ่งของข้อมูลภาคสนามแทนที่จะเป็นตัวคั่น
jveazey

1
เคล็ดลับที่น่าสนใจ @jveazey ฉันจะลอง: mb_convert_encoding($str, "UTF-16LE");ในรหัสส่งออกของฉันและโพสต์ผลลัพธ์ที่นี่
Timm

ไม่ใช่ว่ามันช่วยคุณได้ แต่ฉันทดสอบ Excel 2007 SP2 บน Windows (ใช้ Notepad2 เพื่อสร้างไฟล์ทดสอบ) ทุกอย่างทำงานได้ยกเว้น UTF-16LE BOM (ผลลัพธ์เดียวกับที่คุณใช้บน Windows) และ UTF-16BE BOM (ซึ่งแยกฟิลด์ได้อย่างถูกต้อง แต่ BOM ถูกรวมไว้เป็นอักขระ 2 ตัวแรกใน A1)
jveazey

นอกจากนี้ยังพบstackoverflow.com/questions/155097/…
jveazey

@hveazey คำถามที่ยกมามีคำตอบโดยน่าขยะแขยงแนะนำเพจรหัส Windows-1252 นั่นไม่ได้ผลสำหรับกรณีของฉัน (ภาษาเยอรมัน umlauts และ s ที่คมชัด)
Timm

คำตอบ:


61

การเข้ารหัสของ Excel

ฉันพบว่าการWINDOWS-1252เข้ารหัสเป็นสิ่งที่น่าผิดหวังน้อยที่สุดเมื่อจัดการกับ Excel เนื่องจากโดยทั่วไปแล้ว Microsoft จะมีชุดอักขระที่เป็นกรรมสิทธิ์ของตัวเองจึงสามารถสันนิษฐานได้ว่าจะทำงานได้ทั้งบน Mac และ MS-Excel เวอร์ชัน Windows อย่างน้อยทั้งสองเวอร์ชันจะมีตัวเลือก "กำเนิดไฟล์" หรือ "เข้ารหัสไฟล์" ที่สอดคล้องกันซึ่งอ่านข้อมูลได้อย่างถูกต้อง

ขึ้นอยู่กับระบบและเครื่องมือที่คุณใช้การเข้ารหัสนี้อาจจะมีการตั้งชื่อCP1252, ANSI, Windows (ANSI), MS-ANSIหรือเพียงแค่Windowsในหมู่รูปแบบอื่น ๆ

การเข้ารหัสนี้เป็นชุดของISO-8859-1(aka LATIN1และอื่น ๆ ) ดังนั้นคุณสามารถย้อนกลับไปได้ISO-8859-1หากคุณไม่สามารถใช้WINDOWS-1252ด้วยเหตุผลบางอย่าง โปรดทราบว่าISO-8859-1ไม่มีอักขระบางตัวจากWINDOWS-1252ที่แสดงที่นี่:

| Char | ANSI | Unicode | ANSI Hex | Unicode Hex | HTML entity | Unicode Name                               | Unicode Range            |
| €    | 128  | 8364    | 0x80     | U+20AC      | €      | euro sign                                  | Currency Symbols         |
| ‚    | 130  | 8218    | 0x82     | U+201A      | ‚     | single low-9 quotation mark                | General Punctuation      |
| ƒ    | 131  | 402     | 0x83     | U+0192      | ƒ      | Latin small letter f with hook             | Latin Extended-B         |
| „    | 132  | 8222    | 0x84     | U+201E      | „     | double low-9 quotation mark                | General Punctuation      |
| …    | 133  | 8230    | 0x85     | U+2026      | …    | horizontal ellipsis                        | General Punctuation      |
| †    | 134  | 8224    | 0x86     | U+2020      | †    | dagger                                     | General Punctuation      |
| ‡    | 135  | 8225    | 0x87     | U+2021      | ‡    | double dagger                              | General Punctuation      |
| ˆ    | 136  | 710     | 0x88     | U+02C6      | ˆ      | modifier letter circumflex accent          | Spacing Modifier Letters |
| ‰    | 137  | 8240    | 0x89     | U+2030      | ‰    | per mille sign                             | General Punctuation      |
| Š    | 138  | 352     | 0x8A     | U+0160      | Š    | Latin capital letter S with caron          | Latin Extended-A         |
| ‹    | 139  | 8249    | 0x8B     | U+2039      | ‹    | single left-pointing angle quotation mark  | General Punctuation      |
| Π   | 140  | 338     | 0x8C     | U+0152      | Π    | Latin capital ligature OE                  | Latin Extended-A         |
| Ž    | 142  | 381     | 0x8E     | U+017D      |             | Latin capital letter Z with caron          | Latin Extended-A         |
| ‘    | 145  | 8216    | 0x91     | U+2018      | ‘     | left single quotation mark                 | General Punctuation      |
| ’    | 146  | 8217    | 0x92     | U+2019      | ’     | right single quotation mark                | General Punctuation      |
| “    | 147  | 8220    | 0x93     | U+201C      | “     | left double quotation mark                 | General Punctuation      |
| ”    | 148  | 8221    | 0x94     | U+201D      | ”     | right double quotation mark                | General Punctuation      |
| •    | 149  | 8226    | 0x95     | U+2022      | •      | bullet                                     | General Punctuation      |
| –    | 150  | 8211    | 0x96     | U+2013      | –     | en dash                                    | General Punctuation      |
| —    | 151  | 8212    | 0x97     | U+2014      | —     | em dash                                    | General Punctuation      |
| ˜    | 152  | 732     | 0x98     | U+02DC      | ˜     | small tilde                                | Spacing Modifier Letters |
| ™    | 153  | 8482    | 0x99     | U+2122      | ™     | trade mark sign                            | Letterlike Symbols       |
| š    | 154  | 353     | 0x9A     | U+0161      | š    | Latin small letter s with caron            | Latin Extended-A         |
| ›    | 155  | 8250    | 0x9B     | U+203A      | ›    | single right-pointing angle quotation mark | General Punctuation      |
| œ    | 156  | 339     | 0x9C     | U+0153      | œ     | Latin small ligature oe                    | Latin Extended-A         |
| ž    | 158  | 382     | 0x9E     | U+017E      |             | Latin small letter z with caron            | Latin Extended-A         |
| Ÿ    | 159  | 376     | 0x9F     | U+0178      | Ÿ      | Latin capital letter Y with diaeresis      | Latin Extended-A         |

โปรดทราบว่าเครื่องหมายยูโรจะหายไป ตารางนี้สามารถพบได้ที่อลันไม้

การแปลง

การแปลงจะทำแตกต่างกันในทุกเครื่องมือและภาษา อย่างไรก็ตามสมมติว่าคุณมีไฟล์query_result.csvที่UTF-8เข้ารหัสแล้ว แปลงให้WINDOWS-1252ใช้iconv:

iconv -f UTF-8 -t WINDOWS-1252 query_result.csv > query_result-win.csv

6
เป็นเรื่องเล็กน้อย แต่ดูเหมือนจะเป็นคำตอบสำหรับการนำเข้าไฟล์. csv ที่มีอักขระยุโรปไปยัง Excel บน Mac OSX
Fergie

1
จริง มันตอบคำถามของ OP แทน ในกรณีของคุณก่อนอื่นคุณต้องรู้ (หรือเดา) การเข้ารหัสที่ใช้ในไฟล์ ".csv ด้วยอักขระยุโรป" จากนั้นคุณสามารถแปลงเป็นWINDOS-1252ซึ่งส่วนใหญ่อาจตีความได้อย่างถูกต้องโดยทั้ง Mac และ Windows Excel
mikezter

1
นี่ไม่ใช่ทางออกที่แท้จริงไม่ช้าก็เร็วคุณจะเจอกับตัวละครที่ไม่สามารถแปลงเป็น WINDOWS-1252 ได้
Walter Tross

2
WINDOWS-1252 จะล้มเหลวหากมีตัวอักษรจีน ดังนั้นดูเหมือนว่า UTF-16LE กับ BOM เป็นตัวเลือกเดียว
XWang

สิ่งนี้ทำงานได้ดีสำหรับการส่งออกข้อมูล SQL ที่มีเครื่องหมายกำกับ
motorbaby

26

สำหรับ UTF-16LE ที่มี BOM หากคุณใช้อักขระแท็บเป็นตัวคั่นแทนเครื่องหมายจุลภาค Excel จะรับรู้ฟิลด์ เหตุผลในการทำงานคือ Excel จริง ๆ แล้วใช้ตัวแยกวิเคราะห์ Unicode * .txt

Caveat : หากไฟล์ถูกแก้ไขใน Excel และบันทึกไฟล์นั้นจะถูกบันทึกเป็น ASCII ที่คั่นด้วยแท็บ ปัญหาตอนนี้คือเมื่อคุณเปิดไฟล์ Excel อีกครั้งถือว่าเป็น CSV จริง (มีเครื่องหมายจุลภาค) เห็นว่าไม่ใช่ Unicode ดังนั้นแยกวิเคราะห์เป็นจุลภาคคั่นและด้วยเหตุนี้จะทำให้แฮชของมัน!

อัปเดต : ข้อควรระวังข้างต้นดูเหมือนจะไม่เกิดขึ้นกับฉันในวันนี้ใน Excel 2010 (Windows) อย่างน้อยแม้ว่าจะมีความแตกต่างในพฤติกรรมการบันทึกหาก:

  • คุณแก้ไขและออกจาก Excel (พยายามบันทึกเป็น 'Unicode * .txt')

เปรียบเทียบกับ:

  • การแก้ไขและปิดไฟล์ (ทำงานตามที่คาดไว้)

1
ดี แต่ข้อแม้แบ่งทางออกสำหรับฉัน; ผู้ใช้จะไม่พอใจกับแผ่นงาน Excel ที่เสียหาย
Timm

อาจเป็นไปได้ว่าถ้าคุณเปลี่ยนนามสกุลไฟล์เริ่มต้นเป็น * .txt มันจะทำงานได้ แต่คุณจะสูญเสียการเชื่อมโยงระหว่างประเภทไฟล์และ Excel: นั่นคือพวกเขาไม่สามารถดับเบิลคลิกไฟล์และเปิดใน Excel โดยอัตโนมัติ
Duncan Smart

นั่นไม่ได้ผลสำหรับฉัน ไม่ต้องใช้คอมพิวเตอร์เข้าใจผู้ใช้ต้องเปิดใน Excel โดยไม่ต้องมีอุปสรรค์ใด ๆ
Timm

ฉันมีแผ่นงาน Excel ".csv" ของฉันดูดีด้วยอักขระพิเศษและเขตข้อมูลที่แยกจากกัน ฉันเริ่มต้นสตริงออกของฉันด้วย "\ ufeff" เป็นเครื่องหมายคำสั่งซื้อไบต์ (BOM) จากนั้นใช้แท็บ "\ t" แทนเครื่องหมายจุลภาคสำหรับการแยกฟิลด์และเข้ารหัสไฟล์ด้วย "utf-16LE" ใช้งานได้อย่างมีเสน่ห์ต้องขอบคุณหน้านี้!
หุ้น Geek

การsep=,เข้ารหัสบรรทัดแรกและ UTF16LE ใช้งานได้สำหรับฉันและไม่ต้องการอักขระตัวคั่นอื่น (ยังคงเป็นเครื่องหมายจุลภาค) การเปิดไฟล์โดยดับเบิลคลิกที่โหลดไฟล์อย่างถูกต้องโดยมีอักขระพิเศษและตัวแบ่งบรรทัดภายในเซลล์ยังคงเหมือนเดิม ข้อเสีย: sep=,ส่วนหัวไม่ได้รับการยอมรับจากโปรแกรมใด ๆ ยกเว้น Excel เท่าที่ฉันเคยเห็น แต่ OpenOffice / LibreOffice ไม่ต้องการแฮ็กนี้ (การแบ่งบรรทัดในเนื้อหาของเซลล์ทำงานได้ดีในขณะที่การโหลดจากไฟล์ข้อความ / การใช้ข้อความลงในคอลัมน์ผู้ช่วยใน Excel ไม่จัดการกับตัวแบ่งบรรทัดในเซลล์อย่างถูกต้อง)
CodeManX

24

การลดลงคือ: ไม่มีวิธีแก้ปัญหา Excel 2011 / Mac ไม่สามารถแปลความหมายไฟล์ CSV ที่มีเครื่องหมาย umlauts และเครื่องหมายกำกับเสียงได้อย่างถูกต้องไม่ว่าคุณจะเข้ารหัสหรือกระโดดแบบห่วงอะไร ฉันยินดีที่จะได้ยินคนบอกฉันที่แตกต่างกัน!


4
ฉันพบการเข้ารหัส WIN-1252 หรือ ISO-8859-1 ให้ใช้งานได้ โปรดดูคำตอบของฉัน
mikezter

3
วิธีแก้ไขคือใช้ UTF-16LE และตรวจสอบให้แน่ใจว่าคุณใช้แท็บเพื่อแยกคอลัมน์แทนที่จะเป็นเครื่องหมายจุลภาค
Tim Groeneveld

คุณลองสิ่งนี้กับ Win และ Mac Tim หรือไม่? ดังที่ฉันได้กล่าวถึง TSV ไม่ใช่ตัวเลือกในกรณีของฉัน
Timm

1
สำหรับฉันการส่งออกทำงานได้ดีถ้าฉันใช้การเข้ารหัส WIN-1252 ทั้งบน Mac และใน Excel รุ่น Windows @Timm คุณควรพิจารณาเปลี่ยนคำตอบที่ยอมรับ
Pierre Arnaud

2
สำหรับผู้ที่พบว่าใช้งานได้จริงคุณมีตัวอักษร (เช่นภาษาจีน) ในชุดข้อมูลของคุณหรือไม่? การเข้ารหัส WIN-1252 แบ่งออกเพราะสิ่งเหล่านี้อยู่นอกช่วง
Bill Leeper

11

คุณลองใช้ CSV ที่คั่นด้วยเครื่องหมายจุลภาคและคั่นด้วยเครื่องหมายอัฒภาคเท่านั้น หากคุณลอง CSV ที่คั่นด้วยแท็บ (หรือเรียกว่า TSV) คุณจะพบคำตอบ:

UTF-16LEพร้อมBOM (เครื่องหมายคำสั่งซื้อไบต์) คั่นด้วยแท็บ


แต่ในความคิดเห็นคุณพูดถึงว่า TSV ไม่ใช่ตัวเลือกสำหรับคุณ (ฉันไม่สามารถค้นหาข้อกำหนดนี้ได้ในคำถามของคุณ) ที่น่าเสียดาย. บ่อยครั้งหมายความว่าคุณอนุญาตให้แก้ไขไฟล์ TSV ด้วยตนเองซึ่งอาจไม่ใช่ความคิดที่ดี การตรวจสอบด้วยสายตาของไฟล์ TSV นั้นไม่มีปัญหา นอกจากนี้ตัวแก้ไขสามารถตั้งค่าให้แสดงอักขระพิเศษเพื่อทำเครื่องหมายแท็บ

และใช่ฉันลองสิ่งนี้บน Windows และ Mac


4

นี่คือสิ่งที่มีความสำคัญในการนำเข้า CSV ที่เข้ารหัส utf8 ใน Excel 2011 สำหรับ Mac: Microsoft กล่าวว่า: "Excel สำหรับ Mac ปัจจุบันไม่รองรับ UTF-8" Excel สำหรับ Mac 2011 และ UTF-8

เย่, วิธีไป MS!


4

วิธีแก้ปัญหาที่ดีที่สุดสำหรับการอ่านไฟล์ CSV ด้วย UTF-8 บน Mac คือการแปลงเป็นรูปแบบ XLSX ฉันพบสคริปต์ที่จัดทำโดย Konrad Foerstner ซึ่งฉันได้ปรับปรุงนิดหน่อยโดยเพิ่มการสนับสนุนสำหรับอักขระตัวคั่นที่แตกต่างกัน

ดาวน์โหลดสคริปต์จาก Github https://github.com/brablc/clit/blob/master/csv2xlsx.py เพื่อที่จะรันมันคุณจะต้องติดตั้งโมดูลหลามopenpyxlสำหรับ Excel sudo easy_install openpyxlจัดการไฟล์:


3

ในกรณีของฉันนี้ใช้งานได้ (Mac, Excel 2011, อักขระ Cyrillic และละตินที่มีเครื่องหมายกำกับเช็ก):

  • ชุดอักขระ UTF-16LE (เพียง UTF-16 ไม่เพียงพอ)
  • BOM "\ xFF \ xFE"
  • \ t (แท็บ) เป็นตัวคั่น
  • อย่าลืมเข้ารหัสด้วยตัวคั่นและ CRLFs :-)
  • ใช้ iconv แทน mb_convert_encoding

2

ดูเหมือนว่าในกรณีของฉันที่ Excel 2011 สำหรับ Mac OS ไม่ได้ใช้ Encoding.GetEncoding ("10000") อย่างที่ฉันคิดและเสียเวลา 2 วันด้วย iso เดียวกับ Microsoft OS หลักฐานที่ดีที่สุดสำหรับเรื่องนี้คือการสร้างไฟล์ใน Excel 2011 สำหรับ MAC ด้วยตัวอักษรพิเศษบันทึกเป็น CSV แล้วเปิดในตัวแก้ไขข้อความ MAC และตัวอักษรจะถูกแปลง

สำหรับฉันวิธีนี้ใช้งานได้ - หมายความว่าการส่งออก csv ใน Excel 2011 บน MAC OS มีตัวอักษรยูโรเปียนตะวันตกแบบพิเศษอยู่ภายใน:

Encoding isoMacOS = Encoding.GetEncoding("iso-8859-1");
Encoding defaultEncoding = Encoding.Default; 

// Convert the string into a byte array.
byte[] defaultEncodingBytes = defaultEncoding.GetBytes(exportText);

// Perform the conversion from one encoding to the other.
byte[] ansiBytes = Encoding.Convert(defaultEncoding, isoMacOS, defaultEncodingBytes);

decodedString = isoMacOS.GetString(ansiBytes);

คุณใช้ภาษาอะไรกับ @ user525081 คุณช่วยแปลมันเป็น PHP ได้ไหม?
Timm

@Timm ที่ดูเหมือนตัวอย่าง Java แต่ใน PHP คุณสามารถใช้ iconv เพื่อทำการแปลง - de3.php.net/manual/en/function.iconv.php
Ashish Datta

ตกลง @ user525081 ข้อตกลงเช่นเดียวกับคำตอบอื่น ๆ สิ่งนี้เหมาะสำหรับผู้ใช้ Mac โดยปล่อยให้ผู้ใช้ Windows ตกอยู่ในความเบื่อหน่าย และไม่ตอบคำถามเดิม - การเข้ารหัสที่ใช้ได้กับทั้งสองแพลตฟอร์ม ขอบคุณ
Timm

2

UTF-8 ที่ไม่มี BOM ในปัจจุบันสำหรับฉันใน Excel Mac 2011 14.3.2

งานประเภท UTF-8 + BOM แต่ BOM แสดงผลซึ่งพูดพล่อยๆ

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


2

สิ่งต่อไปนี้ใช้ได้กับฉันใน Excel สำหรับ Mac 2011 และ Windows Excel 2002:

  1. ใช้ iconv บน Mac แปลงไฟล์เป็น UTF-16 Little-Endian + ตั้งชื่อ * .txt (นามสกุล. txt บังคับให้ Excel เรียกใช้ตัวช่วยสร้างการนำเข้าข้อความ):

    iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt

  2. เปิดไฟล์ใน Excel และในตัวช่วยสร้างการนำเข้าข้อความให้เลือก:

    • ขั้นตอนที่ 1: กำเนิดไฟล์ : ไม่ต้องสนใจมันไม่สำคัญว่าคุณจะเลือกอะไร
    • ขั้นตอนที่ 2: เลือกค่าที่เหมาะสมสำหรับตัวคั่นและตัวระบุข้อความ
    • ขั้นตอนที่ 3: หากจำเป็นให้เลือกรูปแบบคอลัมน์

PS UTF-16LE ที่สร้างขึ้นโดย iconv มี BOM ไบต์ FF FE ในตอนเริ่มต้น

PPS ไฟล์ csv ดั้งเดิมของฉันถูกสร้างขึ้นบนคอมพิวเตอร์ Windows 7 ในรูปแบบ UTF-8 (ด้วย BOM bytes EF BB BF ในตอนเริ่มต้น) และใช้ตัวแบ่งบรรทัด CRLF ใช้คอมมาเป็นตัวคั่นฟิลด์และอัญประกาศเดี่ยวเป็นตัวระบุข้อความ มันมีตัวอักษร ASCII รวมถึงตัวอักษรละตินที่แตกต่างกันด้วยเครื่องหมายตัวหนอน, เครื่องหมายบนอากาศ, และตัวอักษรซิริลลิก แสดงทั้งหมดอย่างถูกต้องทั้งใน Excel สำหรับ Win และ Mac

เวอร์ชั่นซอฟต์แวร์ PPPS Exact:
* Mac OS X 10.6.8
* Excel สำหรับ Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625


หากคุณมีไฟล์ UTF-8 ที่ไม่มี BOM
ไอคอนv

2

ใน Mac OS ของฉัน Text Wrangler ระบุไฟล์ CSV ที่สร้างด้วย Excel ว่ามีการเข้ารหัส "ตะวันตก"

หลังจาก googling ฉันได้สร้างสคริปต์เล็ก ๆ นี้ (ฉันไม่แน่ใจเกี่ยวกับความพร้อมใช้งานของ Windows หรืออาจใช้กับCygwinหรือไม่):

$ cat /usr/local/bin/utf8.sh

#!/bin/bash

INPUTFILE="$1"

iconv -f macroman -c -t UTF-8 $INPUTFILE |tr '\r' '\n' >/tmp/file.$$.csv

mv $INPUTFILE ms_trash
mv /tmp/file.$$.csv $INPUTFILE

นี่เป็นสิ่งเดียวที่ทำงานกับฉันใน OS X 10.14.2 (และ Excel 2011)
โดนัลด์

1

ในกรณีของฉันเพิ่ม Preamble เพื่อยื่นแก้ไขปัญหาของฉัน:

var data = Encoding.UTF8.GetBytes(csv);
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(new MemoryStream(result), "application/octet-stream", "data.csv");

0

แทนที่จะเป็น csv ให้ลองส่งเอาต์พุต html ด้วยนามสกุล XLS และ "application / excel" mime-type ฉันรู้ว่ามันใช้งานได้ใน Windows แต่ไม่สามารถพูดกับ MacOS ได้


ขอบคุณ @ royce23 แต่ฉันแค่เสนอไฟล์ CSV สำหรับดาวน์โหลด ฉันไม่สามารถนำเสนอผ่าน HTTP เพราะขนาดที่แท้จริงของมาร์กอัปจะชะลอการตอบสนองในการรวบรวมข้อมูล - ตารางการส่งออกอาจจะมีล้านแถว ...
Timm

ด้วย css html ของคุณจะเป็นเพียงเศษเสี้ยวเล็กกว่า csv ตัวอย่างเช่น: <r><c>id</c><c>name</c><c>phone</c> </r>
royce3

ไม่แน่ใจว่าฉันเข้าใจหรือไม่ แต่ฉันบันทึก CSV บนเซิร์ฟเวอร์และเสนอลิงค์ดาวน์โหลด สร้างการตอบสนอง HTML gobbles หน่วยความจำ PHP มากเกินไป ...
Timm

สิ่งนี้จะใช้งานได้ (ตัวอักษร UTF-8) แต่ถ้าคุณมีตัวแบ่งบรรทัดฝังอยู่ภายในเซลล์ ( brแท็ก) Excel สำหรับ Mac จะไม่สนใจ CSS (ทำงานได้กับ Windows) mso-data-placement:same-cell;
cropredy

0

มันใช้งานได้สำหรับฉัน

  1. เปิดไฟล์ใน BBEdit หรือ TextWrangler *
  2. ตั้งค่าไฟล์เป็น Unicode (UTF-16 Little-Endian) (Line Endings สามารถเป็น Unix หรือ Windows) บันทึก!
  3. ใน Excel: ข้อมูล> รับข้อมูลภายนอก> นำเข้าไฟล์ข้อความ ...

ตอนนี้จุดสำคัญเลือกMacIntoshเป็นแหล่งกำเนิดของไฟล์ (ควรเป็นตัวเลือกแรก)

นี่คือการใช้ Excel 2011 (รุ่น 14.4.2)

* มีแบบเลื่อนลงเล็กน้อยที่ด้านล่างของหน้าต่าง


0

แก้ปัญหานี้โดยใช้ java (UTF-16LE กับ BOM):

String csvReportStr = getCsvReport();
byte[] data = Charset.forName("UTF-16LE").encode(csvReportStr)
    .put(0, (byte) 0xFF)
    .put(1, (byte) 0xFE)
    .array();

โปรดทราบว่าไฟล์ CSV ควรใช้ TABเป็นตัวคั่น คุณสามารถอ่านไฟล์ CSV ได้ทั้งบน windows และ MAC OS X

อ้างอิงถึง: ฉันจะเข้ารหัส / ถอดรหัสอาร์เรย์ไบต์ UTF-16LE ด้วย BOM ได้อย่างไร

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