DBF to CSV
Open a dBase, FoxPro or Clipper table as a CSV file, right here on your device.
Conversion desk
On this device
Start with a file
Drop your file here or choose one from your device.
DBF · 5 files at a time, free
Its new format
FromDBF
ToCSV
Converted on this device. Nothing is uploaded.
Your file's short trip
DBF to CSV
Your file is next.
- Copy records
- Ready
Why turn a DBF into CSV
DBF tables tend to outlive the programs that made them. A stock system written in FoxPro, an accounting package from the DOS years, the attribute table of a shapefile: the data is still useful, but the program that opened it may be long gone. CSV is the plainest way to carry that data forward. Databases, scripts and spreadsheets all read it, and because it's just text, it will still open years from now.
Typical jobs: moving customer or product records into a new system that imports CSV, loading a map layer's attributes into a database, or simply looking inside a table that nothing on your computer opens anymore.
How to convert a DBF file to CSV
- Above the drop area, check the two settings: Delimiter (Comma to start with) and Text encoding (From the file). A setting applies to the files you add after choosing it.
- Drop your .dbf onto the page, or press Choose file. If the table has memo fields, select its .dbt or .fpt file in the same go; it's matched to the table by name.
- Each file gets its own row. When it's done, open What changed under the file name to see which encoding was used and anything that was left out.
- Press Download. With several files, Download all (.zip) saves them together. The free plan converts up to 5 files at a time.
What's preserved, what changes
| What | Result |
|---|---|
| Records and values | Preserved 1,471 records read from 29 of our 30 test files. |
| dBase, FoxPro and Visual FoxPro files | Preserved Version bytes in our test files: 0x02, 0x03, 0x30, 0x31, 0x32, 0x83, 0x8B, 0x8C and 0xF5. |
| Field types | Preserved Read in our test files: auto-increment (+), double (B), text (C), date (D), float (F), integer (I), logical (L), memo (M), number (N), date-time (T), varchar (V) and currency (Y). |
| Declared decimals | Preserved Written as the field declares them, so 3 in a two-decimal field is 3.00 (47 such fields in our test files). |
| Dates and date-times | Preserved Written as 2024-01-31, or 2024-01-31 14:30:00 with a time, early dates included (1,288 values in our test files). |
| Memo text (.dbt and .fpt) | Preserved Read when you add the memo file along with the .dbf: 596 memo values in 6 test files. |
| Text encodings | Preserved Taken from the file's language driver byte, or chosen by you. In our test files: GBK, UTF-8, Windows-1251, Windows-1252 and Windows-874. |
| Records marked as deleted | Not converted Left out, as dBase does when it packs a table (4 in our test files). |
| OLE and picture fields | Not converted Left out, and named in the notes (1 in our test files). |
Preserved: arrives as it is. Approximated: arrives in a simpler form, as the row describes. Not converted: stays behind.
Almost everything in a DBF comes through untouched. What we leave out, we leave out on purpose: records deleted in the original program, which dBase keeps in the file until the table is packed, and OLE or picture fields, which a text file can't carry. Our test set also includes a table that was damaged on purpose. It's turned down with a clear message rather than converted into something half right.
Choosing the settings
Delimiter
Comma is the standard choice, and what most databases and scripts expect. Choose Semicolon if the file is headed for a spreadsheet set up for a decimal comma, as in much of Europe; there, a comma-separated file can open with everything in one column. Tab suits tables whose text is full of commas.
Whichever you pick, numbers keep a decimal point, as in 1250.50. If your spreadsheet expects 1250,50, the workbook route, DBF to Excel, sidesteps the question, because numbers arrive as numbers.
If the CSV may go back into a DBF later, CSV to DBF works out a semicolon file's decimal mark from its numbers. The one case it can't settle is a file whose only numbers with a point look like 1.250. It reads those as 1250 and says so in the notes, which is why the comma is the safest choice for a round trip.
Text encoding
Older tables store each letter as a single byte, and the same byte means a different letter in each code page. With From the file, we read the table's language driver byte, which names its code page. We recognise 55 of them, Chinese, Japanese, Korean and Thai included. If the byte is empty or unknown, we check whether the text is valid UTF-8, and otherwise assume Western (Windows-1252). The notes always say which of these happened.
When letters still look wrong, the pattern usually points to the right choice:
- "é" where you expect "é": the text is UTF-8. Choose UTF-8.
- Symbols such as „ ‚ … ‡ where accented letters belong: the table probably comes from DOS. Try Western DOS (850), then US DOS (437), or Cyrillic DOS (866) for Russian.
- Wrong letters in Polish, Czech or Hungarian: Central European (Windows-1250). Russian or Bulgarian: Cyrillic (Windows-1251). Turkish: Windows-1254.
Change the setting, then add the file again. The new row uses the new encoding, so you can compare the two.
What the CSV looks like
The file is UTF-8 with a byte order mark, so Excel recognises accented letters, and each record ends with CR LF. A value is quoted only when it needs to be: when it contains the delimiter, a quote or a line break, as multi-line memo text often does.
- Dates are written as 2024-01-31, and date-times as 2024-01-31 14:30:00.
- True/false fields become TRUE and FALSE. A field that was never set stays empty.
- Numbers keep the decimals their field declares, so 3 in a two-decimal field is written 3.00.
- Long whole numbers, such as 18-digit IDs, are written digit for digit, never rounded.
- The spaces that pad text fields to their full width are removed.
If something goes wrong
- "This file looks damaged…" The first byte of a DBF names its version, and its field list has to add up to the record length. When either check fails, the file is usually something else renamed to .dbf, or a copy that broke off part way.
- The notes say the file ends early. The header promises more records than the file holds, which usually means an interrupted copy or download. Every complete record is converted; the original copy may have the rest.
- A memo column is empty. Its text lives in the .dbt or .fpt file. Select the table and its memo file together; their names must match apart from the extension, in any letter case. If the notes say memo values were not found, the memo file probably belongs to another copy of the table, such as an older backup.
- A column is missing. General and picture fields (G and P) hold OLE objects and images, which a CSV can't carry. The notes name each one.
- The rows are in a different order than in your program. We write records in the order they're stored. Programs often show them sorted through an index file (.cdx, .mdx, .ndx or .ntx), which isn't needed here. Sort the CSV afterwards.
- "Something unexpected stopped this conversion." Try again, and reload the page if it happens twice. Rows are written as they're read, so a big table needs far less memory here than as a workbook, though the table and its CSV both have to fit in the tab. A file over 200 MB asks before it starts, and files over 1 GB stop with a message: a limit we set so the tab doesn't run out of memory.
Try it with a sample file
No DBF at hand? Download sample-world-countries.dbf (519 KB), the attribute table of Natural Earth's world map: one row per country, with names in Arabic, Chinese, Greek, Hindi and many other languages. Drop it above. Its header doesn't name an encoding, so the notes will say UTF-8 was detected, and every name comes through intact.
Public domain. Source and details: sample file notes.
Plans
Free and Pro
The free plan is the real product, not a trial. Pro is for people who convert in bulk, and it isn't open yet.
| Feature | Free | Pro |
|---|---|---|
| Single files | Free, no watermark, no wait | Same |
| Files at a time | Up to 5 | Up to 100 |
| ZIP and folder input | Pick the files instead | Yes |
| Large files | Works; may be slow on some devices | Built for them |
| Account | None needed | Optional |
| Where files go | Nowhere: converted on your device | Nowhere: converted on your device |
| Price | $0 | Week Pass $6 · Pro $7/month or $48/year · coming soon |
Privacy
Check it yourself
You don't have to take our word for it. Your browser can show you exactly what this page sends.
- Open your browser's developer tools (F12, or Option + Command + I on a Mac) and choose the Network tab.
- Convert a file on this page.
- Look through the requests. None of them carries your file: the page loads its code once, then the conversion runs in a Web Worker on your device.
- For a stronger test, turn off Wi-Fi after the page loads, then convert again. It still works.
The conversion worker runs under its own Content Security Policy, which blocks every network request:
default-src 'none'; script-src 'self'The page itself may only talk to this site and our cookieless analytics:
connect-src 'self' https://gateway.umami.is