SysFile:以 UTF-8 格式保存文件


在 IEC 代码中使用 WSTRING 类型时,数据可以以 UTF-8 格式存储。 通过使用 StringUtiIs 库中的 ConvertUTF16toUTF8 函数,文本被转换为 UTF-8 格式并可以保存到文件中。

  • 创建标准项目并选择CODESYS Control Win V3 作为设备。
  • 通过网络扫描连接目标系统。

图1

  • 打开库管理器并添加以下库: StringUtils SysFile SysTypes2 Interfaces

图2

  • 修改 PLC_PRG 如下:

声明


VAR
    xWrite         : BOOL;
    szFileName     : STRING(128) := 'c:/tmp/TestUTF8.txt';
    hFile          : SysTypes.RTS_IEC_HANDLE := SysTypes.RTS_INVALID_HANDLE;
    iecResult      : SysTypes.RTS_IEC_RESULT;
    wsTextLine     : WSTRING(10) := "Übersetzer";
    sUTF8TextLine  : STRING;
    udiPos         : __XWORD;
    udiWrite       : __XWORD;
END_VAR

实现

IF xWrite THEN
    xWrite := FALSE;
    hFile := SysFileOpen(szFile:=szFileName, am:=SysFile.AM_Write , pResult:=ADR(iecResult));
    IF hFile <> RTS_INVALID_HANDLE    THEN
        Stu.ConvertUTF16toUTF8(sourceStart := ADR(wsTextLine), targetStart := ADR(sUTF8TextLine), dwTargetBufferSize := SIZEOF(wsTextLine), bStrictConversion := TRUE);
        udiWrite := SysFileWrite(hFile:=hFile, pbyBuffer:=ADR(sUTF8TextLine), ulSize:=INT_TO_UDINT(LEN(sUTF8TextLine)), pResult:=ADR(iecResult));
        iecResult  := SysFileClose(hFile:=hFile);
    END_IF
END_IF

  • 启动项目并将 xWrite 变量设置为 TRUE。

图3

如果在编辑器中查看该文件,则文本会正确显示:

图4