我在Linux上有以下代码:-
rc = iconv_open("WCHAR_T", SourceCode);
使用iconv将数据转换为宽字符串(wchar_t
)之前。
为了将其移植到不存在参数1 "WCHAR_T"
上的选项的平台上,我试图了解它的作用。
这会导致子问题,例如:
wchar_t
的单一表示?我希望得到这样的答案:“您显示的代码是执行以下两项操作的简写...。”然后,我也许可以执行这两个步骤,而不必执行"WCHAR_T"
上的iconv_open
选项不存在的平台。
存在(非标准)WCHAR_T
编码的原因是使将wchar_t
的指针转换为char
的指针并与iconv
结合使用变得容易。该编码可理解的格式与系统的本机wchar_t
无关。
如果您询问的是glibc而不是其他libc的实现,那么在Linux上,wchar_t
是系统本机字节序的32位类型,代表Unicode代码点。这与UTF-32
不同,因为UTF-32
通常具有字节顺序标记(BOM),而当没有时,则为大字节序。 WCHAR_T
始终是本地字节序。
注意,某些系统对wchar_t
使用不同的语义。 Windows始终使用带有小尾数UTF-16的16位类型。如果在该平台上使用了GNU libiconv,则WCHAR_T
编码将与在Linux上运行时的编码不同。
语言环境设置不会影响wchar_t
,因为在编译时必须知道wchar_t
的大小,因此实际上不会根据语言环境而变化。
如果这段代码确实是在将指针转换为wchar_t
,并在其对iconv
的调用中使用了指针,那么您需要调整代码以使用UTF-16LE
,UTF-16BE
,UTF-32LE
编码之一]或UTF-32BE
,具体取决于sizeof(wchar_t)
和平台的字节序。这些编码不需要(也不需要)BOM,并且假设您未使用PDP-11,则其中一种对您的平台是正确的。
如果要从其他来源获取数据,则需要弄清楚是什么,并使用上面列表中的适当编码。您也可能应该向上游发送补丁,并要求维护人员使用其他更正确的编码来处理其数据格式。