Hey there
I ran into an issue when trying to display non-ASCII Latin characters on an SSD1306 OLED using Adafruit_GFX + Adafruit_SSD1306.
What I tried:
- Default font with
\xA1 (inverted exclamation mark ¡):
display.print("\xA1Hola fab academy world!");
→ Displays garbage/wrong glyph (|iHola instead of ¡Hola).
- Switched to an extended font (
FreeSerif9pt7b):
#include <Fonts/FreeSerif9pt7b.h>
display.setFont(&FreeSerif9pt7b);
display.print("\xA1Hola fab academy world!");
→ The ¡ character is silently dropped/not rendered at all.
Expected behavior:
The Free* fonts (FreeSans, FreeSerif, FreeMono) should render the full Latin-1 Supplement range (U+00A0–U+00FF), which includes characters essential for major world languages: ¡, ¿, ñ, á, é, ü, ß, ø, ç, etc.
Hardware & software:
- Board: Seeed Studio XIAO RP2040
- Display: SSD1306 128x64 OLED (I2C)
- Library versions: Adafruit_GFX 1.12.x, Adafruit_SSD1306 latest
- Arduino IDE 2.3.x on Windows 10
Why this matters:
Spanish, French, German, Portuguese, and many other languages depend on characters in the Latin-1 range. Right now, the only viable option for non-English speakers is to switch to a completely different library (U8g2), which feels like overkill just to display an ¡ or an ñ.
I understand the Prime Directive about backward compatibility, so I'm not asking to change the default font behavior. But it would be great if:
- The
Free* fonts included the full Latin-1 range (they seem to already have the glyphs in the source TTFs, but the conversion may be truncating them).
- Or alternatively, there was a documented, officially-supported way to display Latin-1 characters without switching libraries entirely.
Workaround I'm using:
For now, I'm just avoiding non-ASCII characters entirely, which works but isn't ideal for documenting projects in languages other than English.
Would love to hear if there's a better approach I'm missing, or if expanding the glyph range in the Free* fonts is feasible. Happy to help test if needed!
Thanks for maintaining this library — it's a staple in the community.
Hey there
I ran into an issue when trying to display non-ASCII Latin characters on an SSD1306 OLED using Adafruit_GFX + Adafruit_SSD1306.
What I tried:
\xA1(inverted exclamation mark¡):display.print("\xA1Hola fab academy world!");→ Displays garbage/wrong glyph (
|iHolainstead of¡Hola).FreeSerif9pt7b):→ The
¡character is silently dropped/not rendered at all.Expected behavior:
The
Free*fonts (FreeSans, FreeSerif, FreeMono) should render the full Latin-1 Supplement range (U+00A0–U+00FF), which includes characters essential for major world languages:¡,¿,ñ,á,é,ü,ß,ø,ç, etc.Hardware & software:
Why this matters:
Spanish, French, German, Portuguese, and many other languages depend on characters in the Latin-1 range. Right now, the only viable option for non-English speakers is to switch to a completely different library (U8g2), which feels like overkill just to display an
¡or anñ.I understand the Prime Directive about backward compatibility, so I'm not asking to change the default font behavior. But it would be great if:
Free*fonts included the full Latin-1 range (they seem to already have the glyphs in the source TTFs, but the conversion may be truncating them).Workaround I'm using:
For now, I'm just avoiding non-ASCII characters entirely, which works but isn't ideal for documenting projects in languages other than English.
Would love to hear if there's a better approach I'm missing, or if expanding the glyph range in the
Free*fonts is feasible. Happy to help test if needed!Thanks for maintaining this library — it's a staple in the community.