Build1 distinct publisher3 min readUpdated
A dev.to writeup traces mojibake in a CSV import to Excel silently assuming the wrong encoding. The mangled names then fail search, joins and grouping downstream.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A build described on dev.to shipped a finished dashboard before anyone noticed that two of its top fifteen game titles were rendering as strings of symbols; a count against the source file put the damage at 4,685 of 82,956 names, and nothing had errored at any point [s1c1]. That is roughly 5.6 percent of the name column silently wrong [1], which matters because the wrong values do not stay in the display layer.
The mechanism is dull and worth knowing. A text file on disk is numbered codes, one per character, and the encoding is the codebook saying which number means which letter; the file does not carry its codebook visibly, so the program opening it must know or guess [s1c2]. The CSV was written in UTF-8, which spends two or more codes on any letter beyond plain English, while Excel's legacy open path guessed the old Western European codebook, which reads one code per character, always [s1c3]. Every two-code letter therefore came back as two wrong characters: an e-acute stored as two codes surfaced as the familiar A-tilde pair [s1c4]. A Romanian title with four accented letters becomes eight wrong characters, which is how "Aventura Copilului Albastru" flagged the problem in the build's top fifteen [s1c5].
Calling this a display bug gets the direction backwards. A font problem means the stored value is correct and the pixels are wrong; here the pixels faithfully show a stored value that is now wrong [s1c6]. The consequences arrive in a predictable order, according to the writeup. Search fails, because the user types the real title and the cell holds the mangled one, with no match and no hint why [s1c7]. Joins fail: a lookup against a clean source list matches on name, so 4,685 rows match nothing, and a failed match does not error, it just drops or blanks the rows [s1c8]. Grouping splits, because the same publisher spelled cleanly in one file and mangled in another becomes two publishers, which is an entity-resolution problem manufactured out of nothing [s1c9].
The detection cost is near zero. Because the wrong codebook maps UTF-8's lead codes to a small set of characters, the corruption has a fingerprint, and Ctrl+F for the A-tilde character is the whole audit, taking about ten seconds [s1c10]. The source says every mapping in its table was re-run through the actual conversion before publishing [s1c11].
The prevention is one dropdown: Data > From Text/CSV rather than a double-click, then set File Origin in the preview to 65001: Unicode (UTF-8), and check a row you know has accents before loading [s1c12]. Paired with setting identifier columns to type Text, that is the whole defensive import, and it costs under a minute [s1c13].
Repair after the fact was cheaper than a full re-import in this case because the corruption is mechanical and reversible where the original file survives, and often reversible even from the mangled text, since the wrong reading was consistent [s1c14]. The build went back to the raw CSV, which existed because raw files never get overwritten, re-read only the damaged column under the correct encoding, exported it with a byte order mark so the paste source opens correctly on any machine, pasted it over the mangled column, and refreshed the pivots [s1c15].
Worth watching in your own pipelines: whether the raw file is still on disk, and whether anything between the import and the dashboard would have raised a single complaint. In this account, nothing did [s1c1].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Search fails: the user searches the real title, the cell holds the mangled one, so there is no match and no hint why.
Joins fail: a lookup against a clean source list matches on the name, so 4,685 rows no longer match anything, and a failed match does not error - the rows just drop or blank.
Grouping splits: the same publisher spelled cleanly in one file and mangled in another becomes two publishers, an entity-resolution problem manufactured out of nothing.
In the build behind the series, the encoding problem was found late, in a finished dashboard: two of the top fifteen games displayed as garbage, and a count against the file put the damage at 4,685 of 82,956 names. Nothing had errored at any point.
A text file on disk is numbered codes, one per character. The encoding is the codebook saying which number means which letter. The file does not carry its codebook visibly, so the program opening the file has to know, or guess.
The build's CSV was written in UTF-8, which covers every language by spending two or more codes on any letter beyond plain English. Excel's legacy open path guessed the old Western European codebook instead, which reads one code per character, always.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Mechanism well specified, scale self-reported and unreplicated
The encoding mechanism is described precisely enough to be checked, and the author states each mojibake mapping was re-run through the actual conversion before publishing, which raises the floor. But everything specific to the incident - the 4,685 of 82,956 count, the two garbage rows in the top fifteen, the successful column-level repair - rests on one self-reported dev.to post with no dataset, script or second publisher to corroborate it.
One self-reported build, no adoption signal
The cluster supplies no releases, deployments, benchmarks, telemetry or third-party usage data. The only observation is the author's own build incident and the remediation they applied to it, which cannot be extrapolated into how widely the failure mode or the prescribed defensive import is encountered or practised.
Slightly overstated framing on a real, mundane defect
The core claims are modest and technically sound, and the piece explicitly deflates itself ('the workflow is the dropdown at import'). The small positive gap comes from packaging a long-known, well-documented mojibake failure as a discovery with a headline number that only the author can verify, plus universalising phrases like 'Ctrl+F is the whole audit' and 'often recoverable from mangled text' that are asserted rather than demonstrated.
Series cross-promotion, no vendor or commercial stake
The visible incentive is authorial and audience-building: the post is part of a numbered dev.to series and repeatedly routes readers to 'article 2', 'article 4' and 'article 6', with a recurring narrative villain to bind the series together. There is no vendor, sponsorship, product, pricing or funding interest disclosed or implied anywhere in the supplied source, and the recommended fixes are built-in Excel features rather than anything sold.
High confidence in mechanism, low in incident specifics
Confidence is bounded by a single-publisher cluster with no independent replication or adoption data. It is held up by the fact that the mechanism claims are the kind that are stable and checkable, and by the author's stated verification of the conversion table; it is pulled down by unverifiable build numbers and the absence of any second source to test the detection and rescue claims.
build
A guard that only speaks in exit codes cannot tell you it stopped guarding1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
AI-written code fails the same four ways, and every gate you own reports green1 distinct publisher
build
CSA's 2026 threat list is a flat line, so ask which threats a config snapshot can prove1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 19, 2026