Character encoding 钛合金工作室英镑符号前的奇怪字符

Character encoding 钛合金工作室英镑符号前的奇怪字符,character-encoding,titanium,titanium-mobile,Character Encoding,Titanium,Titanium Mobile,在Titanium Studio中,我正在使用UTF-8编码的SQLite数据库中存储一个单字符值。当我存储一个英镑符号时,它存储得很好,但当我读回它时,我得到的却是。奇怪的是,尽管有两个字符可见,字符串长度仍然报告为1。主要问题是,此字符构成发送到Windows服务器的文件名的一部分。因此,在Tianium中,尽管有额外的字符,但一切正常,当文件名被发送到Windows时,我们会得到另一个奇怪的字符。我尝试使用Ti.Buffer转换字符,但当我解码时,仍然会得到相同的字符 var tipo_v

在Titanium Studio中,我正在使用UTF-8编码的SQLite数据库中存储一个单字符值。当我存储一个英镑符号时,它存储得很好,但当我读回它时,我得到的却是。奇怪的是,尽管有两个字符可见,字符串长度仍然报告为1。主要问题是,此字符构成发送到Windows服务器的文件名的一部分。因此,在Tianium中,尽管有额外的字符,但一切正常,当文件名被发送到Windows时,我们会得到另一个奇怪的字符。我尝试使用Ti.Buffer转换字符,但当我解码时,仍然会得到相同的字符

var tipo_v='';
var buf = Ti.createBuffer({length:1024});
var l = Ti.Codec.encodeString({
  source: Vtipo_visita,
  dest: buf,
});
buf.length= l;
tipo_v = Ti.Codec.decodeString({
  source: buf,
  charset: Ti.Codec.CHARSET_ASCII
});
变量Vtipo_visita的值为。调用decodeString后,tipo_v具有该值√!

我也试过使用CHATSET_ISO_LATIN_1,但没有任何区别。如果前面没有多余的字符,如何才能正确显示此字符

最后,我发现

String.fromCharCode(163)  

在调试器中输出两个字符,而不是一个字符。感谢您的建议。

这是字符编码不匹配的症状。这就是当字符使用不同于编码的编码进行解码时发生的情况。如果在encodeString调用中指定相同的字符集会发生什么情况?我使用charset_ASCII调用encodeString,但变量buf现在为空。如果没有指定值,根据文档,将使用CHARSET\u UTF8。在这种情况下,如果同时使用CHARSET\u UTF8,会发生什么情况?您正在使用的字符似乎不可在标准ascii中编码。对这两个字符使用CHARSET_UTF8与对这两个字符使用CHARSET_ascii具有相同的效果:变量buf在decodeString之后的长度为零。在任何情况下,我都不明白为什么我要用相同的编码解码?我需要的是更改Vtipo_visita的当前编码,以便符号正确显示。我将尝试使用CHARSET_UTF16并报告。您希望编码器和解码器相同,因为这意味着它们是兼容的。如果您使用任意不同的编码器和解码器,那么您编码的字符可能与解码器中的字符相同,也可能不同。或者解码器可能阻塞。