Vollständig behobene CSV-Zeichencodierungsprobleme! Grundkenntnisse über Zeichencodes, BOM und Zeilenumbruchcodes
Ich bin sicher, dass jeder Entwickler schon erlebt hat, dass beim Öffnen einer CSV-Datei Zeichencodierungsfehler auftreten. Besonders bei CSVs mit japanischen Zeichen treten häufig Probleme aufgrund unterschiedlicher Zeichenkodierungen auf. Dieser Artikel fasst Wissen zusammen, um die Ursachen der Zeichencodierungsfehler grundlegend zu verstehen und sie zuverlässig zu beheben.
Grundlagen der Zeichenkodierung: UTF-8 vs Shift_JIS
Die Zeichenkodierungen, die in CSV-Dateien auf Japanisch Probleme verursachen, sind hauptsächlich die folgenden zwei.
UTF-8
Es ist der aktuelle Webstandard und ein Unicode-basierter Zeichencode, der Zeichen aus der ganzen Welt verarbeiten kann. UTF-8 ist der Standard in Linux, macOS und modernen Webanwendungen. Es ist eine Codierung mit variabler Länge von 1 bis 4 Bytes pro Zeichen, und ASCII-Zeichen werden direkt als 1 Byte dargestellt.
Shift_JIS(CP932)
Es ist eine japanische Zeichenkodierung, die in älteren Windows-Anwendungen und älteren Versionen von Excel verwendet wird. Genauer gesagt wird in Windows-Umgebungen CP932 verwendet (Microsofts Erweiterung von Shift_JIS), und einige geräteabhängige Zeichen (Kreise mit Zahlen, römische Ziffern usw.) können nur in CP932 verarbeitet werden.
Warum tritt Zeichenverschlüsselung auf
Die grundlegende Ursache der Zeichenverzerrung ist einfach. Das liegt daran, dass die Zeichenkodierung beim Schreiben der Datei nicht mit der Zeichenkodierung beim Lesen übereinstimmt.
Wenn beispielsweise eine Webanwendung eine CSV-Datei in UTF-8 exportiert und der Benutzer sie in Excel öffnet, werden die Zeichen beschädigt. Dies liegt daran, dass Excel die Datei in der japanischen Umgebung standardmäßig als Shift_JIS (CP932) interpretiert.
Rolle der BOM (Byte Order Mark)
Die BOM ist ein Marker von mehreren Bytes am Anfang einer Datei, der als Kennzeichen für die Zeichenkodierung dient. Die UTF-8 BOM besteht aus 3 Bytes: <code>0xEF 0xBB 0xBF</code>.
Der wichtige Punkt ist, dass <strong>eine BOM erforderlich ist, um eine UTF-8-CSV in Excel korrekt zu öffnen</strong>. Wenn Sie eine UTF-8-CSV ohne BOM in Excel öffnen, wird sie als Shift_JIS interpretiert und die Zeichen werden beschädigt.
// PHP で BOM 付き UTF-8 CSV を出力する例
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="data.csv"');
// BOM を出力
echo "\xEF\xBB\xBF";
$fp = fopen('php://output', 'w');
fputcsv($fp, ['名前', 'メール', '部署']);
fputcsv($fp, ['田中太郎', 'tanaka@example.com', '開発部']);
fclose($fp);
# Python で BOM 付き UTF-8 CSV を出力する例
import csv
with open('data.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.writer(f)
writer.writerow(['名前', 'メール', '部署'])
writer.writerow(['田中太郎', 'tanaka@example.com', '開発部'])
Allerdings hat die BOM auch Besonderheiten zu beachten. Einige Programme und Shell-Skripte behandeln die BOM als ungültiges Zeichen, was zu Fehlern führen kann. Es ist sicherer, bei CSV-Dateien, die in API-Antworten oder in Programmen verarbeitet werden, keine BOM hinzuzufügen.
Problem mit Zeilenumbruchcode
Ein häufiges Problem neben der falschen CSV-Zeichenkodierung ist der Unterschied in den Zeilenumbruchcodes.
- <strong>CRLF</strong>(<code>\r\n</code>)— Windows-Standard
- <strong>LF</strong>(<code>\n</code>)— Standard für Linux / macOS
- <strong>CR</strong>(<code>\r</code>)— Altes Mac OS (heute kaum noch verwendet)
In RFC 4180 ist der Zeilenumbruch-Code für CSV als CRLF definiert. In der Praxis können jedoch viele Tools CSV mit nur LF problemlos verarbeiten. Excel und einige Legacy-Systeme sind anfälliger für Probleme.
Befehlszeilentools sind nützlich zur Überprüfung von Zeilenumbruchcodes.
# file コマンドで確認
file data.csv
# 出力例: data.csv: UTF-8 Unicode (with BOM) text, with CRLF line terminators
# xxd で先頭バイトを確認(BOM の有無)
xxd data.csv | head -3
Praktisches Lösungsdiagramm
Nachfolgend fassen wir die optimalen Einstellungen je nach CSV-Verwendung zusammen.
| Verwendung | Zeichenkodierung | BOM | Zeilenumbruchcode |
|---|---|---|---|
| In Excel öffnen | UTF-8 | Ja | CRLF |
| Programmgesteuerte Verarbeitung | UTF-8 | Keine | LF |
| Integration mit Legacy-System | Shift_JIS (CP932) | Keine | CRLF |
| API-Antwort | UTF-8 | Keine | LF |
CSV-Testdatei
Verwenden Sie die Test-Dateien von DevLab, um zu überprüfen, ob Ihre Anwendung CSV-Dateien mit verschiedenen Zeichenkodierungen korrekt verarbeiten kann.
- <a href="/ja/files/encoding/">CSV-Testdatei nach Zeichenkodierung</a> — UTF-8 (mit/ohne BOM), Shift_JIS, EUC-JP usw.
- <a href="/ja/files/newline/">Testdateien nach Zeilenumbruchcode</a> — Verschiedene Dateien CRLF, LF, CR
- <a href="/ja/files/csv/">CSV-Testdateiliste</a> — CSV-Dateien in verschiedenen Größen
Zusammenfassung
CSV-Zeichencodierungsprobleme können sicher gelöst werden, wenn Sie die 3 Elemente richtig verstehen: Zeichencodes, BOM und Zeilenumbruchcodes. Für Excel ist der Standard UTF-8 mit BOM und CRLF-Umbruch; für die Programmverarbeitung ist UTF-8 ohne BOM und LF-Umbruch Standard. Verwenden Sie die verschiedenen Testdateien von DevLab, um zu überprüfen, ob Ihre Anwendung jedes Muster korrekt verarbeitet.
Testdatei zur Verwendung in diesem Artikel
- → <a href="/ja/files/encoding/" class="text-primary-600 dark:text-primary-400 hover:underline">Liste der Test-CSV-Dateien nach Zeichencodierung (UTF-8 / Shift_JIS / EUC-JP)</a>
- → <a href="/ja/files/csv/" class="text-primary-600 dark:text-primary-400 hover:underline">Liste der CSV-Testdateien</a>
Verwandte Artikel
- → <a href="/ja/blog/file-format-quick-reference/" class="text-primary-600 dark:text-primary-400 hover:underline">Schnellreferenz Dateiformate für Entwickler</a>
- → <a href="/ja/blog/wordpress-upload-limit-fix/" class="text-primary-600 dark:text-primary-400 hover:underline">5 Möglichkeiten, das WordPress-Upload-Limit zu erhöhen</a>