哪个编码在Mac和Windows上使用Excel正确打开CSV文件?

Tim*_*imm 132 windows csv macos excel utf

我们有一个Web应用程序,可以导出包含UTF-8的外来字符的CSV文件,没有BOM.Windows和Mac用户都在Excel中获得垃圾字符.我尝试用BOM转换为UTF-8; 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
Run Code Online (Sandbox Code Playgroud)

最好的是具有BOM的UTF-16LE,但CSV不被识别.字段分隔符是逗号,但分号不会改变.

是否有任何编码在两个世界都有效?

mik*_*ter 57

Excel编码

WINDOWS-1252在处理Excel时,我发现编码是最不令人沮丧的.由于它基本上是微软拥有自己的专有字符集,因此可以假设它可以在Mac和Windows版本的MS-Excel上运行.两个版本至少包括相应的"文件源"或"文件编码"选择器,它正确地读取数据.

根据您的系统和使用的工具上,该编码也可以被命名为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         |
Run Code Online (Sandbox Code Playgroud)

请注意,缺少欧元符号.这张桌子可以在Alan Wood找到.

转变

每种工具和语言的转换都有所不同.但是,假设您有一个query_result.csv您知道已UTF-8编码的文件.将其转换为WINDOWS-1252使用iconv:

iconv -f UTF-8 -t WINDOWS-1252 query_result.csv > query_result-win.csv
Run Code Online (Sandbox Code Playgroud)

  • 有点像faff,但这似乎是在Mac OSX上将带有欧洲字符的.csv文件导入Excel的答案 (6认同)
  • 这不是真正的解决方案,您迟早会遇到无法转换为 WINDOWS-1252 的字符。 (2认同)
  • 如果有中文字符,WINDOWS-1252将失败.所以似乎带有BOM的UTF-16LE是唯一的选择. (2认同)

Dun*_*art 25

对于带有BOM的UTF-16LE,如果使用制表符作为分隔符而不是逗号,Excel将识别字段.它的工作原理是Excel实际上最终使用其Unicode*.txt解析器.

警告:如果文件在Excel中编辑并保存,它将保存为制表符分隔的ASCII.现在的问题是,当您重新打开文件时,Excel假定它是真正的CSV(带逗号),看到它不是Unicode,因此将其解析为逗号分隔 - 因此将对其进行哈希处理!

更新:至少今天在Excel 2010(Windows)中似乎没有发生上述警告,尽管在以下情况下保存行为似乎存在差异:

  • 编辑并退出Excel(尝试另存为'Unicode*.txt')

相比:

  • 仅编辑和关闭文件(按预期工作).

  • utf-16LE BOM + tab作为分隔符适合我 (4认同)

Tim*_*imm 22

最低点是:没有解决方案.无论您使用什么编码或箍跳,Excel 2011/Mac都无法正确解释包含变音符号和变音符号的CSV文件.我很高兴听到有人告诉我不同​​!

  • 我发现WIN-1252或ISO-8859-1编码工作正常.请看我的答案. (4认同)
  • 解决方案是使用UTF-16LE并确保使用选项卡来分隔列而不是逗号. (3认同)
  • 对于那些发现这个工作的人,您实际上是否在数据集中扩展了(如中文)字符?WIN-1252编码打破了这些因为它们超出了范围. (2认同)

Wal*_*oss 10

您只尝试过以逗号分隔和以分号分隔的CSV.如果你曾尝试使用制表符分隔的CSV(也称为TSV),你会找到答案:

UTF-16LEBOM(字节顺序标记),制表符分隔


但是:在评论中你提到TSV不是你的选择(我在你的问题中找不到这个要求).这真遗憾.这通常意味着您允许手动编辑TSV文件,这可能不是一个好主意.视觉检查TSV文件不是问题.此外,可以将编辑器设置为显示特殊字符以标记选项卡.

是的,我在Windows和Mac上试过这个.