Quick Answer
Accounting CSV encoding errors are platform-pair problems: the fix depends on which bank exported the file and which accounting platform is importing it. Chase exports UTF-8 without BOM — QuickBooks Online accepts this directly. Bank of America exports Windows-1252 — QuickBooks Online rejects it; re-encode to UTF-8 without BOM. Barclays exports UTF-8 with BOM — QuickBooks Online rejects the BOM prefix even though the encoding is correct; Xero accepts the same file because it strips the BOM before parsing.
Saying "convert to UTF-8" is incomplete advice when the file already is UTF-8 but carries a BOM. Use SplitForge Format Checker to detect both the encoding and BOM status of your file, then re-save without BOM for QuickBooks Online imports.
This guide covers bank-statement-specific encoding workflows. If you're diagnosing a general CSV encoding error unrelated to bank imports, see CSV Garbled Characters After Import? Fix UTF-8 vs ANSI Errors. For BOM removal as a standalone procedure, see How to Fix BOM (Byte Order Mark) Issues in CSV Files: Complete Guide (2025). This guide focuses specifically on the bank-by-platform matrix — which source encodings each accounting platform accepts.
Fast Fix: Fix Encoding for QuickBooks Online Import
If your QuickBooks Online import is failing with garbled characters or a rejected first field:
- Open SplitForge Format Checker and upload your bank statement CSV.
- Check the detected encoding and BOM status in the results panel.
- If encoding shows Windows-1252: re-save as UTF-8 without BOM (see §Re-encoding in Excel below).
- If encoding shows UTF-8 with BOM: re-save as UTF-8 without BOM — the encoding is correct but the BOM prefix causes QuickBooks Online to misread the first column header.
- If encoding shows UTF-8 without BOM: the encoding is not the problem. Check delimiter, date format, and column order.
What Causes CSV Encoding Errors in Accounting Imports
Character Encoding Basics
A CSV file is a plain text file. "Encoding" refers to the rule set that maps bytes in the file to characters. The two encodings that cause problems in accounting imports are:
UTF-8: The current universal standard. Represents every Unicode character. Bank of America's older export templates still produce Windows-1252, but UTF-8 is the default for most modern systems. Modern accounting platforms require UTF-8.
Windows-1252 (ANSI): A legacy Windows encoding that covers Western European characters. It is a superset of ISO-8859-1 (Latin-1). Files saved from older Excel installations or legacy bank export systems are often Windows-1252. The encoding works correctly for ASCII characters (A–Z, 0–9, common punctuation) but differs from UTF-8 for characters above code point 127 — accented characters, currency symbols like £ and €, and some punctuation variants.
For a bank statement containing only ASCII characters (amounts in USD, standard merchant names, dates in YYYY-MM-DD), a Windows-1252 file and a UTF-8 file are byte-identical for all content fields. The encoding error surfaces during import validation — the platform checks the file encoding header or byte pattern, rejects Windows-1252, and reports a generic "encoding error" or "garbled characters" message.
The BOM Problem
A BOM (Byte Order Mark) is a sequence of bytes at the start of a file that signals encoding type. UTF-8's BOM is three bytes: EF BB BF. It is optional — the UTF-8 standard does not require it — but Microsoft Excel adds it automatically when you use "Save As → CSV UTF-8 (comma delimited)."
QuickBooks Online rejects the UTF-8 BOM. When a BOM-prefixed file is imported, QBO reads the BOM bytes as part of the first column header name. A column named Date becomes <BOM>Date (where <BOM> is the three-byte prefix rendered as a special character). QBO cannot match this mangled header to its expected column list and fails the import.
Xero silently strips the UTF-8 BOM before parsing. The same file that fails QBO import succeeds Xero import without any modification.
The BOM problem is distinct from the encoding problem. A file can be correctly encoded as UTF-8 and still fail QBO import because it carries a BOM. "Convert to UTF-8" does not fix this — the file is already UTF-8. The fix is specifically "save as UTF-8 without BOM."
Bank-by-Platform Encoding Matrix
The encoding fix depends on the combination of source bank and target platform. The matrix below documents common bank export encodings and each platform's acceptance rules.
Bank Export Encodings
| Bank | Default Export Encoding | BOM Present | Notes |
|---|---|---|---|
| Chase | UTF-8 without BOM | No | Compatible with all platforms |
| Bank of America | Windows-1252 | No | Re-encode to UTF-8 for QBO, Xero, Sage |
| Wells Fargo | UTF-8 without BOM | No | Compatible with all platforms |
| Citibank | UTF-8 without BOM | No | Compatible with all platforms |
| Barclays | UTF-8 with BOM | Yes | BOM causes QBO rejection; Xero accepts |
| HSBC UK | UTF-8 with BOM | Yes | BOM causes QBO rejection; Xero accepts |
| Lloyds | Windows-1252 | No | Re-encode to UTF-8 for all platforms |
| NatWest | UTF-8 without BOM | No | Compatible with all platforms |
Note: Bank export encoding can vary by account type, export template version, and online banking interface update. Always verify with Format Checker before assuming encoding from bank name alone.
Platform Acceptance Matrix
| Platform | UTF-8 no BOM | UTF-8 with BOM | Windows-1252 | Behavior on Rejection |
|---|---|---|---|---|
| QuickBooks Online | Accepted | Rejected — BOM prefix corrupts first column header | Rejected — encoding validation fails | Generic "unable to import" or garbled first field |
| Xero | Accepted | Accepted — BOM stripped silently | Rejected | "Invalid file format" encoding error |
| Wave | Accepted | Accepted | Accepted (limited) | Garbled characters for non-ASCII content |
| Sage Business Cloud | Accepted | Accepted | Rejected | "File encoding not supported" |
| NetSuite (CSV import) | Accepted | Accepted | Rejected | Encoding mismatch on non-ASCII characters |
Pairing-Based Fix Decision
Use the matrix to determine the correct fix for your source/target combination:
Chase → QuickBooks Online: No encoding fix needed. UTF-8 without BOM is accepted.
Bank of America → QuickBooks Online: Re-encode from Windows-1252 to UTF-8 without BOM before import.
Bank of America → Xero: Re-encode from Windows-1252 to UTF-8 (without BOM is fine; Xero strips BOM anyway).
Barclays → QuickBooks Online: Remove BOM — the encoding itself (UTF-8) is correct. Do not re-encode; only strip the BOM prefix.
Barclays → Xero: No fix needed — Xero strips the BOM automatically.
Lloyds → QuickBooks Online: Re-encode from Windows-1252 to UTF-8 without BOM.
HSBC UK → QuickBooks Online: Remove BOM only — encoding is already UTF-8.
How to Detect Encoding and BOM Status
Using SplitForge Format Checker (Recommended)
SplitForge Format Checker detects the encoding and BOM status of a CSV file in one step. Upload your bank statement CSV and the results panel shows:
- Detected encoding (UTF-8, Windows-1252, ISO-8859-1, or other)
- BOM present (yes/no)
- First three bytes in hex (for manual verification)
- Recommended action for QuickBooks Online, Xero, and Sage import
Format Checker runs locally in your browser — the CSV file is not uploaded to any server during analysis.
Manual Detection in Notepad++ (Windows)
Open the file in Notepad++. The encoding is shown in the lower-right status bar. "UTF-8-BOM" means UTF-8 with BOM present. "ANSI" means Windows-1252 (Windows default). "UTF-8" without qualifier means UTF-8 without BOM.
Manual Hex Inspection
The first three bytes of a UTF-8 BOM file are EF BB BF in hexadecimal. Open the file in a hex editor (HxD on Windows, xxd on macOS/Linux). If the file begins with EF BB BF, a BOM is present. If the first bytes are FF FE, the file is UTF-16 LE (rare for bank exports but requires conversion).
Re-encoding Workflows
Excel: Save as UTF-8 Without BOM
Microsoft Excel's "CSV UTF-8 (comma delimited)" option adds a BOM automatically. To save UTF-8 without BOM from Excel, use one of these approaches:
Option A — Notepad++ conversion (recommended):
- Open the CSV in Notepad++.
- Go to Encoding menu.
- Select "Convert to UTF-8" (not "UTF-8-BOM").
- Save the file (Ctrl+S).
Option B — Python one-liner (for repeated use):
import codecs
with codecs.open('input.csv', 'r', 'windows-1252') as f:
content = f.read()
with codecs.open('output.csv', 'w', 'utf-8') as f:
f.write(content)
This reads Windows-1252 input and writes UTF-8 without BOM output.
Option C — Excel "Save As" to plain CSV: Save As → "CSV (Comma delimited)" (not the UTF-8 variant). This produces Windows-1252, which QBO still rejects — but it avoids the BOM. Follow with Notepad++ conversion to UTF-8.
BOM Removal Only (when encoding is already UTF-8)
If Format Checker shows "UTF-8 with BOM" (Barclays, HSBC UK, Excel-saved UTF-8 files):
Notepad++ method:
- Open in Notepad++.
- Encoding menu → select "UTF-8" (not "UTF-8-BOM").
- Save.
The encoding remains UTF-8; only the BOM prefix is removed.
Python one-liner:
with open('input.csv', 'r', encoding='utf-8-sig') as f:
content = f.read()
with open('output.csv', 'w', encoding='utf-8') as f:
f.write(content)
utf-8-sig reads UTF-8 with BOM and strips the BOM on read. Writing with utf-8 produces UTF-8 without BOM.
Windows-1252 to UTF-8 (Full Re-encoding)
If Format Checker shows "Windows-1252" or "ANSI" (Bank of America, Lloyds, older bank exports):
Notepad++ method:
- Open in Notepad++.
- Encoding menu → select "Convert to UTF-8."
- Save.
Verify after conversion: Re-open Format Checker and re-upload the converted file. Confirm encoding shows UTF-8 without BOM before importing.
Platform-Specific Import Notes
QuickBooks Online
QBO's bank statement import accepts UTF-8 without BOM only. The import wizard does not expose an encoding selection option — the file must be correctly encoded before upload. A BOM-prefixed file produces the symptom "first column header appears as a special character or blank" in the column mapping screen. A Windows-1252 file produces "garbled characters" or an "unable to recognize file" error.
QBO's import template requires specific column headers: Date, Description, Amount (or separate Debit/Credit columns depending on template version). Column header garbling from a BOM prefix will cause a template mismatch even if the data rows are correctly encoded.
Xero
Xero accepts both UTF-8 with and without BOM. It also accepts ISO-8859-1 (Latin-1) for many imports. Windows-1252 files are rejected. Xero's error message for encoding failure is "Invalid file format" — less specific than QBO's garbled-characters symptom. If Xero rejects a file that appears to be correct format, check encoding before investigating other causes.
Wave
Wave is the most permissive of the major platforms for encoding. It accepts UTF-8 and Windows-1252. BOM-prefixed files are accepted for most import flows. If non-ASCII characters appear garbled after Wave import, the source encoding may be ISO-8859-2 (Eastern European) or another non-Western encoding — re-encoding to UTF-8 resolves this.
Sage Business Cloud
Sage Business Cloud requires UTF-8. BOM-prefixed files are accepted and the BOM is stripped during import. Windows-1252 files are rejected with "File encoding not supported." Note that Sage 50 UK uses Windows-1252 internally — bank statement exports from Sage 50 UK need re-encoding before import into Sage Business Cloud or any cloud platform. For a full Sage encoding and import error reference, see Fix Sage CSV Import Errors: Sage 50 and Business Cloud Guide.
Common Encoding Error Symptoms and Causes
| Symptom | Most Likely Cause | Platform Affected | Fix |
|---|---|---|---|
First column header shows ‘ or similar | UTF-8 content read as Windows-1252 | Any | Source file is UTF-8; platform expects Latin-1; re-save as UTF-8 |
First column header shows as blank or ? | BOM bytes read as column header prefix | QuickBooks Online | Remove BOM; encoding is correct |
£ and € show as £ and € | Windows-1252 opened as UTF-8 | Any | Re-encode source from Windows-1252 to UTF-8 |
| Import fails with "unrecognized format" | Encoding mismatch at file level | QBO, Sage, NetSuite | Detect with Format Checker; re-encode to UTF-8 |
| Column mapping shows unexpected extra column | BOM prefix splits first column name | QuickBooks Online | Remove BOM |
| All data rows import correctly; headers misalign | Header row encoding differs from data rows | Rare — mixed encoding | Recreate header row in plain UTF-8 |