GERBER_JOBFILE_WRITER: use UTF8 encoding according to current specif.
Since 2020, non ASCII7 chars are encoded using UTF8 encoding. A old but incorrect encoding was previously used. Fixes https://gitlab.com/kicad/code/kicad/-/issues/17534
This commit is contained in:
parent
f0912b6128
commit
cb8ed07858
|
@ -61,18 +61,8 @@ GERBER_JOBFILE_WRITER::GERBER_JOBFILE_WRITER( BOARD* aPcb, REPORTER* aReporter )
|
||||||
std::string GERBER_JOBFILE_WRITER::formatStringFromUTF32( const wxString& aText )
|
std::string GERBER_JOBFILE_WRITER::formatStringFromUTF32( const wxString& aText )
|
||||||
{
|
{
|
||||||
std::string fmt_text; // the text after UTF32 to UTF8 conversion
|
std::string fmt_text; // the text after UTF32 to UTF8 conversion
|
||||||
|
fmt_text = aText.utf8_string();
|
||||||
|
|
||||||
for( unsigned long letter : aText )
|
|
||||||
{
|
|
||||||
if( letter >= ' ' && letter <= 0x7F )
|
|
||||||
fmt_text += char( letter );
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char buff[16];
|
|
||||||
std::snprintf( buff, sizeof( buff ), "\\u%4.4lX", letter );
|
|
||||||
fmt_text += buff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fmt_text;
|
return fmt_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,18 +242,18 @@ void GERBER_JOBFILE_WRITER::addJSONGeneralSpecs()
|
||||||
wxString guid = GbrMakeProjectGUIDfromString( msg );
|
wxString guid = GbrMakeProjectGUIDfromString( msg );
|
||||||
|
|
||||||
// build the <project id> string: this is the board short filename (without ext)
|
// build the <project id> string: this is the board short filename (without ext)
|
||||||
// and all non ASCII chars are replaced by '_', to be compatible with .gbr files.
|
// and in UTF8 format.
|
||||||
msg = fn.GetName();
|
msg = fn.GetName();
|
||||||
|
|
||||||
// build the <rec> string. All non ASCII chars and comma are replaced by '_'
|
// build the <rev> string. All non ASCII chars are in UTF8 form
|
||||||
wxString rev = ExpandTextVars( m_pcb->GetTitleBlock().GetRevision(), m_pcb->GetProject() );
|
wxString rev = ExpandTextVars( m_pcb->GetTitleBlock().GetRevision(), m_pcb->GetProject() );
|
||||||
|
|
||||||
if( rev.IsEmpty() )
|
if( rev.IsEmpty() )
|
||||||
rev = wxT( "rev?" );
|
rev = wxT( "rev?" );
|
||||||
|
|
||||||
m_json["GeneralSpecs"]["ProjectId"]["Name"] = msg.ToAscii();
|
m_json["GeneralSpecs"]["ProjectId"]["Name"] = msg.utf8_string().c_str();
|
||||||
m_json["GeneralSpecs"]["ProjectId"]["GUID"] = guid;
|
m_json["GeneralSpecs"]["ProjectId"]["GUID"] = guid;
|
||||||
m_json["GeneralSpecs"]["ProjectId"]["Revision"] = rev.ToAscii();
|
m_json["GeneralSpecs"]["ProjectId"]["Revision"] = rev.utf8_string().c_str();
|
||||||
|
|
||||||
// output the board size in mm:
|
// output the board size in mm:
|
||||||
BOX2I brect = m_pcb->GetBoardEdgesBoundingBox();
|
BOX2I brect = m_pcb->GetBoardEdgesBoundingBox();
|
||||||
|
|
Loading…
Reference in New Issue