web-dev-qa-db-ja.com

MacとWindowsの両方でExcelでCSVファイルを正しく開くエンコーディングはどれですか?

UTF-8、BOMなしの外部文字を含むCSVファイルをエクスポートするWebアプリがあります。 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

最良の方法はBOMを使用したUTF-16LEですが、CSVはそのように認識されません。フィールド区切り文字はコンマですが、セミコロンは変更しません。

両方の世界で機能するエンコーディングはありますか?

128
Timm

ローダウンは次のとおりです。解決策はありません。 Excel 2011/Macは、エンコードやフープのジャンプに関係なく、ウムラウトや発音区別符号を含むCSVファイルを正しく解釈できません。誰かが私に違うことを言うのを聞いてうれしいです!

21
Timm

Excelエンコーディング

Excelを扱うとき、WINDOWS-1252エンコーディングが最もイライラしないことがわかりました。基本的にマイクロソフトが独自の文字セットを所有しているため、MS-ExcelのMacバージョンとWindowsバージョンの両方で動作すると想定できます。両方のバージョンには、少なくとも、データを正しく読み取る「File Origin」または「File encoding」セレクターが含まれています。

システムと使用するツールに応じて、このエンコーディングは、CP1252ANSIWindows (ANSI)MS-ANSI、または単にWindowsなどのバリエーションもあります。 。

このエンコードはISO-8859-1(別名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         |

ユーロ記号が欠落していることに注意してください。このテーブルは Alan Wood にあります。

変換

変換は、ツールと言語ごとに異なります。ただし、query_result.csvエンコードされていることがわかっているファイルUTF-8があるとします。 iconvを使用してWINDOWS-1252に変換します。

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

BOMを使用したUTF-16LEの場合、コンマではなくタブ文字を区切り文字として使用すると、Excelはフィールドを認識します。これが機能する理由は、Excelが実際にはUnicode * .txtパーサーを使用することになるからです。

警告:ファイルをExcelで編集して保存すると、タブ区切りASCIIとして保存されます。問題は、ファイルを再度開くと、Excelが実際のCSV(コンマ付き)であると見なし、Unicodeではないため、コンマ区切りとして解析するため、ハッシュが作成されるということです。

更新:上記の警告は、少なくとも今日のExcel 2010(Windows)では私には起きていないように見えますが、次の場合には保存動作に違いがあるように見えます:

  • excelを編集して終了します(「Unicode * .txt」として保存しようとします)

に比べ:

  • ファイルを編集して閉じるだけ(期待どおりに動作します)。
25
Duncan Smart

カンマ区切りおよびセミコロン区切りのCSVのみを試しました。タブ区切りのCSV(TSVとも呼ばれます)を試した場合、答えが見つかります。

TF-16LE with BOM(byte order mark)、tab-separated


ただし:コメントで、TSVはあなたにとって選択肢ではないことを述べています(質問でこの要件を見つけることができませんでした)。それは残念だ。多くの場合、TSVファイルの手動編集を許可することを意味しますが、これはおそらく良い考えではありません。 TSVファイルの視覚的なチェックは問題ではありません。さらに、タブをマークするための特殊文字を表示するようにエディターを設定できます。

そして、はい、WindowsとMacでこれを試しました。

9
Walter Tross

MacでUTF-8を使用してCSVファイルを読み取るための最善の回避策は、それらをXLSX形式に変換することです。 Konrad Foerstnerが作成したスクリプトを見つけました。さまざまな区切り文字のサポートを追加することで、スクリプトを少し改善しました。

Githubからスクリプトをダウンロードします https://github.com/brablc/clit/blob/master/csv2xlsx.py 。実行するには、Excelファイル操作用のpythonモジュールopenpyxlをインストールする必要があります:Sudo easy_install openpyxl

4
brablc

以下は、utf8でエンコードされたCSVをExcel for Macにインポートする際の決まり文句です。Microsoftは、「Excel for Macは現在UTF-8をサポートしていません。」 Excel for Mac 2011およびUTF-8

はい、MSに行く方法です!

4
Timm

私の考えでは、Mac OS用のExcel 2011はEncoding.GetEncoding( "10000")を使用していないようで、Microsoft OSと同じisoで2日間無駄にしました。これに対する最善の証拠は、Excel 2011でMAC用の特別な文字を含むファイルを作成し、CSVとして保存してからMACテキストエディターで開くと、文字がスクランブルされることです。

私にとってこのアプローチはうまくいきました-つまり、MAC OS上のExcel 2011のcsvエクスポートには、特別な西ヨーロッパの文字が含まれています:

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);
2
user525081

現在、BOMなしのUTF-8はExcel Mac 2011 14.3.2で機能します。

UTF-8 + BOMの種類の作品ですが、BOMはちらつきとしてレンダリングされます。

UTF-16は、ファイルをインポートしてウィザードを完了すると機能しますが、ダブルクリックするだけでは機能しません。

2
Craig Stuntz

私の場合、これは機能しました(Mac、Excel 2011、キリル文字とラテン文字、チェコ語の発音区別記号):

  • 文字セットUTF-16LE(単にUTF-16では不十分でした)
  • BOM "\ xFF\xFE"
  • 区切り記号としての\ t(タブ)
  • セパレータとCRLFもエンコードすることを忘れないでください:-)
  • Mb_convert_encodingの代わりにiconvを使用します
2
Marek Demčák

以下は、Excel for Mac 2011およびWindows Excel 2002で機能しました。

  1. Macでiconvを使用して、ファイルをUTF-16リトルエンディアンに変換し、*。txtという名前を付けます(拡張子が.txtの場合、Excelはテキストインポートウィザードを実行します)。

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

  2. Excelでファイルを開き、テキストインポートWizardで以下を選択します。

    • ステップ1:File Origin:それを無視します。何を選んでも構いません
    • ステップ2:DelimitersおよびText qualifierに適切な値を選択します
    • ステップ3:必要に応じて、列形式を選択する

PS iconvによって作成されたUTF-16LEの先頭にはBOMバイトFF FEがあります。

PPS私のオリジナルのcsvファイルはWindows 7コンピューターでUTF-8形式で作成され(先頭にBOMバイトEF BB BFがあります)、CRLF改行を使用しました。コンマはフィールド区切り文字として使用され、単一引用符はテキスト修飾子として使用されました。 ASCII文字に加えて、チルダ、ウムラウトなどのラテン文字、キリル文字が含まれていました。 Excel for WinとMacの両方ですべてが正しく表示されました。

PPPS Exactソフトウェアバージョン:
* Mac OS X 10.6.8
* Excel for Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625

2
Koit Saarevet

私のMac OSでは、Text WranglerはExcelで作成されたCSVファイルが「Western」エンコーディングを持っていると識別しました。

いくつかのグーグルの後に、私はこの小さなスクリプトを作成しました(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
2
user243202

私の場合、ファイルにプリアンブルを追加すると問題が解決しました。

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
razon

これは私のために働く

  1. BBEditまたはTextWrangler *でファイルを開きます。
  2. ファイルをUnicode(UTF-16リトルエンディアン)として設定します(行末にはUnixまたはWindowsを使用できます)。セーブ!
  3. Excelの場合:[データ]> [外部データの取得]> [テキストファイルのインポート...].

ここで重要な点は、File OriginとしてMacintoshを選択することです(最初の選択である必要があります)。

これはExcel 2011(バージョン14.4.2)を使用しています

*ウィンドウの下部に小さなドロップダウンがあります

0
Gazzer

csvの代わりに、XLS拡張機能と「application/Excel」mime-typeを使用してhtmlを出力しようとします。これはWindowsでも機能することはわかっていますが、MacOSの代弁はできません

0
royce3

Java(BOM付きUTF-16LE)を使用してこれを解決します。

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の両方で読むことができます。

参照: BOMでUTF-16LEバイト配列をエンコード/デコードする方法

0
bluearrow