# How to process non-latin letters with ODA IFC SDK?

 1. [FAQ](/faq)
2. »
3. [IFC](/faq/ifc)

String data within IFC is always in UTF-8 format, so when you get string using getAttr, the string is in UTF-8, and when you putAttr a string, SDK assumes the string is in UTF-8 format. Such UTF-8 data is implicitly converted into so-called Control Directives ('\\X\\C4\\X\\EF\\X\\EA\\X\\DC\\X\\F1\\X\\E9\\X\\E1') when writing Step Physical File, and converted from Control Directives into UTF-8 when reading Step Physical File.

| ```<br><br>UTF-8 -> putAttr -> writeFile -> Control Directives -> readFile -> getAttr -> UTF-8<br>``` |
| --- |

So when you are working with string data, OdString and OdAnsiString can be used in pair for conversions:

| ```<br><br>OdString wStr("АБВГДЕЁ");<br>``` |
| --- |
| ```<br><br>OdAnsiString ansiStr(wStr, OdCodePageId::CP_UTF_8);<br>``` |
| ```<br><br>inst->putAttr("string_value", ansiStr); // or inst->putAttr("string_value", ansiStr.c_str());<br>``` |
| ```<br><br>_writeSpf(model, "file.ifc"); // .ifc file will contain ansiStr data converted into internal representation (Control Directives) of such strings<br>``` |
| ```<br><br>...<br>``` |
| ```<br><br>_readSpf("file.ifc", model);<br>``` |
| ```<br><br>inst->getAttr("stringValue") >> ansiStr; // UTF-8 string with original data<br>``` |
| ```<br><br>OdString wStr(ansiStr, CP_UTF_8); // WChar string<br>``` |
