delphi程序中unicode小问题

时间:2021-08-04 17:34:13
  以前我用delphi写过一个文本编辑软件,说白了就是模仿windows系统记事本写的并添加了几个新功能。一直以来,复制粘贴都没问题,最近不能复制粘贴了!
  每次输入打开文本文件都没问题,但从软件里复制文本出来,再粘贴到其他地方都是unicode字符(西文字符没变,但只要是中文字符都是乱码,和clipbrd.exe中选择“查看”-“Unicode文字”一样的乱码,所以我才觉得是unicode字符)。也不应该是系统剪贴板的问题!因为从其他任何地方的CTRL+C,CTRL+V都没问题,而且从别处复制的文本粘贴进软件也没问题,但就是,只要从软件里copy的文本,粘贴出来都是unicode文字。
  这是怎么回事?如何解决?

14 个解决方案

#1


字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码

#2


引用 1 楼 sz_haitao 的回复:
字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码


它的乱码,英文也会乱码

#3


应该是系统字符集转换问题。 

#4


引用 1 楼 sz_haitao 的回复:
字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码




应该是编码的问题。不过这的问题有点不同。因为我用的就是系统Fixedsys字体,CHINESE_GB2312。另外西文字符串没问题,但只要是中文就一定是乱码,而且只从我的软件复制出来才是这样。

#5


引用 2 楼 sz_haitao 的回复:
引用 1 楼 sz_haitao 的回复:
字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码


它的乱码,英文也会乱码


我这英文和数字复制出来没有问题,但中文就不行。

#6


可能是你的 控件的 font.charset 中,设置了一种其它外文的字符集(或者是你不自觉的改了这个属性-例如,你的控件是继承 parent 控件的属性的),都有可能造成这个问题

#7


其实很多的乱码都不是编码的问题,而是显示的问题。

#8


我测试过很多次,我这个应该不是显示问题
引用 7 楼 foxyy8888 的回复:
其实很多的乱码都不是编码的问题,而是显示的问题。

#9


font.charset 设置的就是windows的字符集呀。还有一点很奇怪就是以前没问题,后来才出现这种奇怪现象的。

引用 6 楼 meegowei1 的回复:
可能是你的 控件的 font.charset 中,设置了一种其它外文的字符集(或者是你不自觉的改了这个属性-例如,你的控件是继承 parent 控件的属性的),都有可能造成这个问题

#10


看来问题解决不掉啦,别的机子用我这个软件没问题。

#11


我觉得可以这样来发现问题:
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。
2.在MadEdit里面改变查看时候的编码类型,看用Utf-8,或者GBK,用哪种编码能看到不是乱码。
3.其他机器没有问题的话说明编码没问题,可能是显示的问题或者他的剪贴板改变了你的编码。对剪贴板不是很了解,是不是带了UNICODE BOM?
4.他的机器是不是英文版+langpack的
5.以下我遇到过的问题仅供参考:我前几天搞excel 的xml打包的时候,xml里面有日文,韩文的字。
日文的在madedit里面能显示,大部分能粘贴复制,而在有些编辑器里面就是拷贝后再粘贴就不对。
而韩文的编码正确,都显示的是口,用IE打开xml看可以看到韩文,用编辑器打开看是口,看16进制编码是utf-8编码没错。但是用能找到的编辑器,拷贝后再粘贴看16进制都错了******,我估计问题就是出在剪贴板上。
我不相信韩国人的电脑就没法拷贝吗?所以一切皆有可能。
那些棒子文粘贴进delphi也不行。懒得捣鼓了直接用utf8码,然后UnicodeToWidestring,再和其它的widestring+++,再widestringtoutf8搞定的。

#12


关于1
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。

也可以输入正确的汉字,采用Utf-8编码保存,然后对比下。

#13


多谢朋友详细的解答!我一直怀疑是系统剪切板问题,在从软件copy时自动转化为UNICODE了。只能把乱码还原为汉字。哎。


引用 11 楼 foxyy8888 的回复:
我觉得可以这样来发现问题:
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。
2.在MadEdit里面改变查看时候的编码类型,看用Utf-8,或者GBK,用哪种编码能看到不是乱码。
3.其他机器没有问题的话说明编码没问题,可能是显示的问题或者他的剪贴板改变了你的编码。对剪贴板不是很了解,是不是带了UNIC……

#14


你的解答最详尽给力
引用 12 楼 foxyy8888 的回复:
关于1
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。

也可以输入正确的汉字,采用Utf-8编码保存,然后对比下。

#1


字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码

#2


引用 1 楼 sz_haitao 的回复:
字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码


它的乱码,英文也会乱码

#3


应该是系统字符集转换问题。 

#4


引用 1 楼 sz_haitao 的回复:
字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码




应该是编码的问题。不过这的问题有点不同。因为我用的就是系统Fixedsys字体,CHINESE_GB2312。另外西文字符串没问题,但只要是中文就一定是乱码,而且只从我的软件复制出来才是这样。

#5


引用 2 楼 sz_haitao 的回复:
引用 1 楼 sz_haitao 的回复:
字符集、编码的问题,比较晕
win2003自带的远程桌面,从远程复制的内容,在本地粘贴,也是有时候正常有时候乱码


它的乱码,英文也会乱码


我这英文和数字复制出来没有问题,但中文就不行。

#6


可能是你的 控件的 font.charset 中,设置了一种其它外文的字符集(或者是你不自觉的改了这个属性-例如,你的控件是继承 parent 控件的属性的),都有可能造成这个问题

#7


其实很多的乱码都不是编码的问题,而是显示的问题。

#8


我测试过很多次,我这个应该不是显示问题
引用 7 楼 foxyy8888 的回复:
其实很多的乱码都不是编码的问题,而是显示的问题。

#9


font.charset 设置的就是windows的字符集呀。还有一点很奇怪就是以前没问题,后来才出现这种奇怪现象的。

引用 6 楼 meegowei1 的回复:
可能是你的 控件的 font.charset 中,设置了一种其它外文的字符集(或者是你不自觉的改了这个属性-例如,你的控件是继承 parent 控件的属性的),都有可能造成这个问题

#10


看来问题解决不掉啦,别的机子用我这个软件没问题。

#11


我觉得可以这样来发现问题:
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。
2.在MadEdit里面改变查看时候的编码类型,看用Utf-8,或者GBK,用哪种编码能看到不是乱码。
3.其他机器没有问题的话说明编码没问题,可能是显示的问题或者他的剪贴板改变了你的编码。对剪贴板不是很了解,是不是带了UNICODE BOM?
4.他的机器是不是英文版+langpack的
5.以下我遇到过的问题仅供参考:我前几天搞excel 的xml打包的时候,xml里面有日文,韩文的字。
日文的在madedit里面能显示,大部分能粘贴复制,而在有些编辑器里面就是拷贝后再粘贴就不对。
而韩文的编码正确,都显示的是口,用IE打开xml看可以看到韩文,用编辑器打开看是口,看16进制编码是utf-8编码没错。但是用能找到的编辑器,拷贝后再粘贴看16进制都错了******,我估计问题就是出在剪贴板上。
我不相信韩国人的电脑就没法拷贝吗?所以一切皆有可能。
那些棒子文粘贴进delphi也不行。懒得捣鼓了直接用utf8码,然后UnicodeToWidestring,再和其它的widestring+++,再widestringtoutf8搞定的。

#12


关于1
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。

也可以输入正确的汉字,采用Utf-8编码保存,然后对比下。

#13


多谢朋友详细的解答!我一直怀疑是系统剪切板问题,在从软件copy时自动转化为UNICODE了。只能把乱码还原为汉字。哎。


引用 11 楼 foxyy8888 的回复:
我觉得可以这样来发现问题:
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。
2.在MadEdit里面改变查看时候的编码类型,看用Utf-8,或者GBK,用哪种编码能看到不是乱码。
3.其他机器没有问题的话说明编码没问题,可能是显示的问题或者他的剪贴板改变了你的编码。对剪贴板不是很了解,是不是带了UNIC……

#14


你的解答最详尽给力
引用 12 楼 foxyy8888 的回复:
关于1
1.粘贴到MadEdit(我觉得这个在字符集方面比Ultra好)中,看其16进制到底是什么。如果你对字符编码比较熟悉。就可以发现问题了。

也可以输入正确的汉字,采用Utf-8编码保存,然后对比下。