delphi 如何判断编码格式,解决乱码问题

Delphi通过ITHTTP传输有汉字乱码问题 本文介绍了在Delphi 2010开发环境下解决JSON数据传输过程中汉字乱码问题的方案。通过使用SuperObject组件处理JSON数据,配合IDHTTP和IDHTTPServer控件实现TCP/IP协议通信。详细说明了客户端和服务端的开发流程,包括报文编码处理、Unicode转换函数实现等关键代码,并展示了最终的模拟测试结果。该方案有效解决了汉字传输乱码问题,为Delphi开发者提供了JSON数据传输的实用参考。 阅读详情

          前阵子因为需要用到idhttp下载网页,然而令人很生气的是,他下载的html源码是乱码的,这样子是没有办法使用的,所以就必须要把他进行编码格式转换,然而令人困扰的是,他是什么格式,又该怎么转,转成什么格式,这都是问题,转成什么格式,自然是ansi ,可以正常人看的懂的才行了,该怎么转,就必须先知道原先是什么格式了,,他是什么格式,这个就不好办了

          网页格式,不外乎三种,utf8 ,gbk,gb2312,  再细分的话,utf8 属于双字节,gbk,gb2312属于单字节,他们的编码方式分别为 unicode 和ansi ;也就是说,我们下载的网页他们的编码方式就是unicode 和ansi,那么目标明确了我们需要做的是,判断网页到底是哪种编码,二选一,然而很遗憾的是,在网上并没有找到有用的信息,而且也没有找到能够判断字符是属于那种编码的函数,于是自己就想了个方法,写了下面的语句:

function htmlDecode(html:string);
begin
    html:=lowercase(html);
    if (not containtext('charset=',html) or  containtext('=utf',html)) then
    html:=utf8decode(html);
    result:=html;
end;

这个函数对于大多数网页还是有效果的,然而却存在两个问题:

1、如果"charset=" 等号和charset 中间存在空格,那么就会出问题,

2、用这个方法解析出来的网页,虽然是ansi的,而且也能看懂,然而,在有的标签和中文间转换会出错,会把标签的"<" 和中文的编码,一起转义成"?"号,破坏html文件。

      若果对于标签不是很在乎的还是可以用,然而对于需要的却是个灾难性问题,后来在看一篇文章的时候,找到了另一种有效的方法;


方法二:

       这种方法使用的是预编译,如下:

function htmldecode(html:string):string;
begin
     {$IFDEF UNICODE}
     result:=html;
     {$ELSE}
     result:=utf8decode(html);
     {$ENDIF}
end;

用这种方法后,第一种的出现的问题都没了。


总结:第一种方法并不是没用,二手没有找到足够的判断条件

    

Delphi Combobox字符处理故障排除与解决方案 本文还有配套的精品资源,点击获取 简介:在Delphi中,Combobox控件用于显示可供用户选择的下拉列表。用户在删除字符时可能会遇到乱码问题,这与字符编码不一致、控件属性设置、代码处理不当、数据库或文件交互以及系统设置等因素有关。文章深入探讨了这些问题的原因并提供了相应的解决方案,以确保Combobox在处理字符串时能够正确显示,避免出现乱码。 1. 字符编码... 阅读详情

相关推荐

LC与RC滤波电路实战对比:从原理到选型指南

本文深入对比了LC与RC滤波电路的核心原理与实战应用。LC滤波利用电感与电容的无损能量搬运,适合高频、大电流电源滤波,效率高但需注意谐振风险;RC滤波通过电阻消耗能量实现滤波,结构简单、成本低,适用于低频信号处理或小电流供电场景。文章提供了从工作原理、性能维度到具体选型的完整指南,帮助工程师根据项目需求(如频率范围、负载电流、效率)做出精准选择。

weixin_29240711的博客 489

UTF8和ANSI互转

std::string Utf8ToAnsi(const char* szUtf8) { bool bNeedFreeW = false; int WLength = MultiByteToWideChar(CP_UTF8, 0, szUtf8, -1, NULL, NULL); LPWSTR pszW = NULL; __try { pszW = (LPWSTR)_alloca((WLength + 1) * sizeof(WCHAR)); } __except (EXCEPTION..

jota 2975

EDA虚拟机分享2020版本(Synopsys2020)

EDA虚拟机分享

亦安的数字小站 9109

关于Delphi的Combox乱码问题的研究

待写

missmecn的专栏 1047

Unicode(UTF16)、UTF8、ansi编码格式字符串之间相互转换

C++标准模板库只能实现宽字符和utf8编码格式字符串之间的转换,而且这个功能在c++11引入,在C++17中废弃,所以不建议使用,如果需要跨平台,建议使用 ICU(International Components for Unicode)库。C++ 标准库没有直接提供 ANSI 和 UTF-8 之间的转换功能,但你可以使用第三方库,例如 ICU(International Components for Unicode),或者在 Windows 平台上使用特定的 API 进行转换。

萧戈的专栏 1万+

emWin - 俄语UTF-8编码乱码问题(已解决

原文链接:emWin - 俄语UTF-8编码乱码问题(已解决) 目录 第一步: 第二步: 后续故事: 使用的是STM32单片机,用的是emWin的库,编码工具是U2C(UTF-8 To C文件)。 最近在搞一个项目,液晶屏要显示九种语言、种语言、语言、言言言! 操作步骤: 第一步: 新建名为Temp文本文档,把需要编码的俄语放到txt文档里,并另存为UTF-8格式,,如下文字: ...

Somnus陳的博客 1万+

关于delphi的程序在英文操作系统下乱码问题

由于delphi7编译的程序是非unicode程序(代码页),所有在英文操作系统下会有乱码问题解决方法: 1. 首先在Lageuage中选"Instal files for East Asian Lanuages",这步一定要做,否则中文就乱码。 2. 区域设置里面的Advanced选默认的非Unicode的程序的的语言解释为Chinese(PRC),Delphi是非Unicode程序...

weixin_30737363的博客 628

DELPHI7加载UNICODE编码格式的TXT显示乱码解决方法

DELPHI7的STRING默认是ANSI编码,加载UNICODE编码格式的TXT显示乱码解决方法如下: procedure TForm1.Button1Click(Sender: TObject);var F:TFileStream; S:WideString; I:Integer; FileName:string;begin FileName := ExtractFilePa...

weixin_34234829的博客 2451

Delphi判断文本文件的编码格式

今天在网上看到一位老兄写的判断记事本保存的文本的四种格式的判断,觉得非常不错。Notepad(记事本)只支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,在Delphi中如何判断与读取这些不同格式的文本呢?首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:ANSI:        无格式定义;Unicode:     

Newweapon's Trace 2588

Delphi读取和写入utf-8编码格式的文件

读取UTF-8格式的文件内容 function LoadUTF8File(AFileName: string): string; var ffileStream:TFileStream; fAnsiBytes: string; S: string; begin ffileStream:=TFileStream...

dkopg24406的专栏 1467

delphi html 乱码,delphi 获得网页乱码

Delphi7里idhttp(UTF-8网页)乱码的话可以用UTF8Decode()函数解决例如:Memo1.text:=UTF8Decode(idhttp1.get(**));但到了delphi2010里在用UTF8Decode这个函数转换就不行还是会乱码所以我们可以这样procedureTForm1.SpeedButton1Click(Sender:TObject);VarcText:...

weixin_32771227的博客 925

IDHTTP中文乱码问题

对于跟我一样刚学Delphi的新手 有时候编写程序要获取某个网页代码 但老是遇到乱码问题 想当初就为这个问题我花了好长时间反复测试 所以这里我帖一些自己的代码 希望能帮到大家... //================================================================================ delphi7里idhttp(UTF-8网页

nextop88的专栏 2867

VS code 终端输入乱码问题解决

问题: 在使用VScode编辑代码时,代码页面中文正常,但终端输出那里中文却为乱码。 原因: 出现这个现象的原因是因为编码方式的不同。 (VScode的默认编码方式为UTF-8,中国地区下cmd的编码方式GBK) 因为VScode终端那里调用的是cmd,两者编码方式的不同的就导致了中文乱码问题解决: 所以我们解决乱码的方式,就是将两者的编码方式统一就行,要么将两者都统一为UTF-8,要么就统一为GBK。 ...

Cooperia的博客 8275

delphi tcp utf8_tcp/ip通讯中出现乱码问题(200分)

用mail2000控件代替,还前前几天aolo给我一个单元文件,现在给你unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;proced...

weixin_39994806的博客 270

DELPHI XE4 Base64加密 后解决中文乱码问题

1、引用单元文件 Soap.EncdDecd 2、写一个返回string函数, 其实就是 EncodeString 的修正 function EncodeString2(const Input: string): string; var InStr, OutStr: TStringStream; begin InStr := TStringStream.Create(Input,...

yang0605016的专栏 2873

request、response 中文乱码问题解决方式

request、response 中文乱码问题解决方式 request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码; response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码;   乱码产生的原因:不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采

qq_30246693的博客 700
上一篇: 块级元素和行内元素的区别
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值