

关于Memo控件显示UTF8网页源码乱码的问题
错误:No Mapping for the Unicode character exists in the target multi-byte code page. 在目标多字节代码页中不存在unicode字符的映射
原因:指定utf8编码打开Ansi编码文件,zong.txt文件编码方式用Ansi,使用Memo1.Lines.LoadFromFile('d:\zong.txt', TEncoding.UTF8)
UTF8是Unicode编码的一种,delphi对UTF8支持不好,需要用函数转换一下再显示
delphi11的Memo与Stringlist用LoadFromFile打开文件ANSI正常,打开ut8会乱码,但带有BOM的utf8不会乱码,
delphi11的Memo用SaveToFile保存文件默认格式Notepad显示为带有Bom的utf8,N++显示为utf-8-BOM
1. 使用Utf8ToAnsi函数转换
s := idhttp1.get(Edit1.Text);
memo1.lines.text := Utf8ToAnsi(s);
2. 相关函数还有
AnsiToUtf8
Utf8ToAnsi
UTF8Decode
UTF8Encode
3. memo打开与保存utf8文件不乱码的方法
Memo1.Lines.LoadFromFile('d:\zong.txt', TEncoding.UTF8);
Memo1.Lines.SaveToFile('d:\hehe.txt', TEncoding.UTF8);