Delphi7中idhttp和superobject获取网页中文乱码解决办法
Delphi7及其以下版本的 VCL 只支持 Ansi,
所以在使用WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示
Delphi7自带的utf-8转换函数遇到其无法识别的字符串就返回空。
新建一个util_utf8.pas,然后引用这个
转换函数可以解决这个bug
unit
util_utf8;
interface
uses
Windows;
type
UTF8String =
AnsiString
;
function
AnsiToWide(
const
S:
AnsiString
):
WideString
;
function
WideToUTF8(
const
WS:
WideString
): UTF8String;
function
AnsiToUTF8(
const
S:
AnsiString
): UTF8String;
function
UTF8ToWide(
const
US: UTF8String):
WideString
;
function
WideToAnsi(
const
WS:
WideString
):
AnsiString
;
function
UTF8ToAnsi(
const
S: UTF8String):
AnsiString
;
implementation
function
AnsiToWide(
const
S:
AnsiString
):
WideString
;
var
len:
integer
;
ws:
WideString
;
begin
Result:=
''
;
if
(Length(S) =
0
)
then
exit;
len:=MultiByteToWideChar(CP_ACP,
0
,
PChar
(s), -
1
,
nil
,
0
);
SetLength(ws, len);
MultiByteToWideChar(CP_ACP,
0
,
PChar
(s), -
1
,
PWideChar
(ws), len);
Result:=ws;
end
;
function
WideToUTF8(
const
WS:
WideString
): UTF8String;
var
len:
integer
;
us: UTF8String;
begin
Result:=
''
;
if
(Length(WS) =
0
)
then
exit;
len:=WideCharToMultiByte(CP_UTF8,
0
,
PWideChar
(WS), -
1
,
nil
,
0
,
nil
,
nil
);
SetLength(us, len);
WideCharToMultiByte(CP_UTF8,
0
,
PWideChar
(WS), -
1
,
PChar
(us), len,
nil
,
nil
);
Result:=us;
end
;
function
AnsiToUTF8(
const
S:
AnsiString
): UTF8String;
begin
Result:=WideToUTF8(AnsiToWide(S));
end
;
function
UTF8ToWide(
const
US: UTF8String):
WideString
;
var
len:
integer
;
ws:
WideString
;
begin
Result:=
''
;
if
(Length(US) =
0
)
then
exit;
len:=MultiByteToWideChar(CP_UTF8,
0
,
PChar
(US), -
1
,
nil
,
0
);
SetLength(ws, len);
MultiByteToWideChar(CP_UTF8,
0
,
PChar
(US), -
1
,
PWideChar
(ws), len);
Result:=ws;
end
;
function
WideToAnsi(
const
WS:
WideString
):
AnsiString
;
var
len:
integer
;
s:
AnsiString
;
begin
Result:=
''
;
if
(Length(WS) =
0
)
then
exit;
len:=WideCharToMultiByte(CP_ACP,
0
,
PWideChar
(WS), -
1
,
nil
,
0
,
nil
,
nil
);
SetLength(s, len);
WideCharToMultiByte(CP_ACP,
0
,
PWideChar
(WS), -
1
,
PChar
(s), len,
nil
,
nil
);
Result:=s;
end
;
function
UTF8ToAnsi(
const
S: UTF8String):
AnsiString
;
begin
Result:=WideToAnsi(UTF8ToWide(S));
end
;
end
.
//*************************//**************************
//以上是一个文件,保存后引用。
//*************************//**************************
uses superobject, util_utf8;
procedure TForm1.Timer1Timer(Sender: TObject);
var
idHttp: TIdHTTP;
get_back,tmp1,tmp2:string;
jRet: ISuperObject;
strm: TStringStream;
begin
strm := TStringStream.Create('');
try
idHttp := TIdHTTP.Create(nil);
IdHTTP1.Get(self.Edit1.Text, strm);
get_back:=UTF8ToAnsi(strm.DataString);
idHttp.Disconnect;
idHttp.Free;
finally
strm.Free;
end;
jRet:=TSuperObject.Create(stObject);
jRet := SO(copy(get_back,8,Length(get_back)-9));
tmp1:= jRet.O['gszzl'].AsString();
self.Label2.Caption :=jRet.O['name'].AsString()+':'+tmp1;
end;
Delphi7中idhttp和superobject获取网页中文乱码解决办法相关推荐
- linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法
当前1.3.3版本的pypyodbc在linux系统上面已经可以读取有中文字符的mdb文件,不再出现异常,但是读取的中文字符却全是乱码. 下面是根据一些现象的合理推论: mdb文件来自于windows ...
- php接受get参数乱码,如何解决php get 参数乱码问题,php中文乱码解决办法
如何解决php get 参数乱码问题如何解决php参数乱码的问题,乱码php获取参数的解决方案:1.使用"iconv ('GB 2312 ',' UTF-8 ',$龚辉):"解决乱 ...
- Qt中文乱码解决办法
目录 一.解决方法: 1. QT4版本 2. QT5版本 二.QString 为什么会乱码呢 三.tr的使用 一.解决方法: 1. QT4版本 中文乱码解决办法是在main.cpp文件加入: #inc ...
- php7 中文乱码_PHP 中文乱码解决办法总结分析
PHP 中文乱码解决办法总结分析 更新时间:2009年07月30日 01:19:43 作者: 总之一句话,要解决PHP中文乱码最好最快的解决办法就是,页面申明的编码与数据库内部编码一致,如果页面申 ...
- NetBeans中文乱码解决办法
首先来看看网上的一篇文章:http://it.dengchao.org/neatbeans-problem-fedora/linux/ 在Windows和Linux(Fedora/Ubuntu/Red ...
- java控制台打印输出 中文乱码 解决办法
java控制台打印输出 中文乱码 解决办法 问题:IDEA控制台打印时出现中文乱码 原因:java资源的编码和ideal的不一致 解决办法: 第一步 1:打开intelliidea安装路径,Intel ...
- mysql数据库 中文乱码_数据库 MySQL中文乱码解决办法总结
MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1 ...
- pycharm 运行控制台中文乱码解决办法
pycharm 运行控制台中文乱码解决办法
- navicat for mysql 显示中文乱码解决办法
navicat for mysql 显示中文乱码解决办法 最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题 ...
- windows下git bash中文乱码解决办法
一.解决办法1:(直接上图) 1.在git bash下,右键 出现下图,选择options: 2.选择"Text" 3.将"Character set"设置为 ...
最新文章
- layui循环数据并渲染_layui使用表格渲染获取行数据的例子
- java文件流插入数据库_使用Java流查询数据库
- 多线程之:用户态和内核态的区别
- MyEclipse常用快捷键及快捷键大全
- 在Linux(ubuntu server)上面安装NodeJS的正确方法
- 【转】js之iframe子页面与父页面通信
- redis 安装并设置为开机启动服务
- 最简单的jQuery程序
- Python设置默认语言编码
- Notepad++在线安装使用JSON插件
- [转载] ANTLR——词法分析
- python中bind的用法_Javascript中bind()方法的使用与实现
- Dropbox被墙了,幸亏还有类似服务SugarSync
- [转载] python+opencv4读取图像
- 剑指offe55--链表中环的入口结点
- 2017年最后一篇文章:微信小程序游戏跳一跳刷榜原理解析!
- NeurIPS 2022 | 何恺明团队新作:MAE扩展到视频!学习时空表示,最优Mask比例高达90%!...
- 富士胶片3月底完成日立影像诊断业务收购;中国癌症早筛第一股诺辉健康登陆港交所 | 美通企业日报...
- JDBC占位符的使用
- 如何安装国内源(阿里云yum源)
热门文章
- u盘启动linux hp服务器,分享下用U盘启动给服务器【HP DL165 G7】安装原版2003系统的经验...
- mapxtreme 更改图元的位置
- 正确安装adb工具,且常用的adb命令
- Linux开发板移植minicom
- 光电编码器的原理及应用场合_光电编码器的原理及应用电路
- 车牌号识别易语言代码
- NodeJs 多核多进程并行框架实作 - CNode
- 华为交换机的使用命令及简单配置(亲测)
- Java 并发编程实战-创建和执行任务的最佳实践
- java计算机毕业设计台球收费管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署