ODB++ export: Non-ASCII characters cause ambiguous designators

Description

KiCad replaces non-ASCII characters in designators during ODB++ export with an underscore (_).
If designators differ only by the non-ASCII character, they collapse into the same name in the export.

Example:

  • Ü1, Ä1, Ö1 → all become _1.

This causes two issues:

  1. Loss of uniqueness: different components in the schematic/PCB share the same designator in ODB++.
  2. Loss of traceability: it is impossible to map the normalized _1 back to the original designator.

Expected behavior:

  • Either a deterministic ASCII transliteration should be applied (e.g. Ü → U, Ä → A, Ö → O) to preserve uniqueness,
    or
  • Non-ASCII characters should be disallowed/rejected at the point of definition, with a clear warning/error message.

Steps to reproduce

  1. Create a project with components using non-ASCII characters in their designators that differ only by the non-ASCII character (e.g. Ü1, Ä1, Ö1).
  2. Export ODB++.
  3. Open corresponding component layer, e.g. \steps\pcb\layers\comp_+_top\components
  4. Compare designators in CMP entries

Result: The components are exported with identical designator _1.
Expected: Each component keeps a unique ASCII representation of its designator, or the design is rejected with an explicit error.

KiCad Version


Application: KiCad PCB Editor x64 on x64

Version: 9.0.4, release build

Libraries:
	wxWidgets 3.2.8
	FreeType 2.13.3
	HarfBuzz 10.2.0
	FontConfig 2.15.0
	libcurl/8.13.0-DEV Schannel zlib/1.3.1

Platform: Windows 11 (Erzeugungsversion 26100), 64-bit Edition, 64 bit, Little endian, wxMSW
OpenGL: ATI Technologies Inc., AMD Radeon(TM) Graphics, 4.6.14802 Compatibility Profile Context 21.40.64.06 30.0.14064.6002

Build Info:
	Date: Aug 18 2025 00:41:45
	wxWidgets: 3.2.8 (wchar_t,wx containers)
	Boost: 1.88.0
	OCC: 7.9.1
	Curl: 8.13.0-DEV
	ngspice: 44
	Compiler: Visual C++ 1942 without C++ ABI
	KICAD_IPC_API=ON

Locale: 
	Lang: de_DE
	Enc: UTF-8
	Num: 1.234,5
	Encoded кΩ丈: D0BACEA9E4B888 (sys), D0BACEA9E4B888 (utf8)
Edited by Manuel Wassenberg