免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4792 | 回复: 10
打印 上一主题 下一主题

[Mail] sendmail+mimedefang+mysql,日文系统乱码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-14 21:52 |只看该作者 |倒序浏览
这回是领教了mysql的乱码问题

查看研究了下网上资料
能用的方法都试过了

在代码中添加 “set names XX”
修改mysql的默认字符集
decond,encond
都试过了

在中文系统里是可以实现,无乱码了

但是在当发信端是日文系统的时候
依然是乱码~~

而且发现和mimedefang-filter的编码方式无关,
mail服务器在中文系统的linux上,mysql客户端在另外的中文系统的os上
mysql的客户端,服务器端,能设成utf8的都设成了~~
到底是什么原因导致的乱码呢~~
头晕啊~~

[ 本帖最后由 莫糖 于 2009-10-22 08:17 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2009-10-21 10:00 |只看该作者
不可能自動知道!
那種作業系統有那麼多 MUA/MTA, 所以也很難判斷的出來,除非自己會加一些 X-Tag/X-Header 等給別人認

论坛徽章:
0
3 [报告]
发表于 2009-10-22 08:18 |只看该作者

回复 #2 abel 的帖子

恩,这个晓得的,就是想加标记,不过这种办法解决乱码失败了,同样的代码在重启mysql后,不能实现无乱码了~~
折磨死我了~~

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2009-10-22 09:06 |只看该作者
原帖由 莫糖 于 2009-10-22 08:18 发表
恩,这个晓得的,就是想加标记,不过这种办法解决乱码失败了,同样的代码在重启mysql后,不能实现无乱码了~~
折磨死我了~~

如果您指 $fname 這個變數的編碼,我想您得先知道他的 charset, 或是 mime 中的 language tag 才行
如果是主旨 ($Subject), 則可以從 mime 中的 language tag , Ex: =?GB2312?B?xjdkjdkfjf?= 取得原始編碼,
在以 iconv 做 gb2312 <->utf8 間的轉換 (也可以 mysql>set names XXX 來自動轉碼)

论坛徽章:
0
5 [报告]
发表于 2009-10-22 13:40 |只看该作者

回复 #4 abel 的帖子

我在mail的信息来源里,找到附件的charset
Content-Type: text/html;
        charset="iso-2022-jp"
.......
Content-Disposition: attachment;
        filename="=?iso-2022-jp?B?TUVMRGFuZHkbJEIlIiE8JSslJCVWNSFHPU14TVElXiVLJWUlIiVrGyhC?=
        =?iso-2022-jp?B?LnR4dA==?="

我在mimedefang里,使用“set names 'iso-2022-jp'”
不起作用~~
还是说我应该想办法在mimedefang里取得
"=?iso-2022-jp?B?TUVMRGFuZHkbJEIlIiE8JSslJCVWNSFHPU14TVElXiVLJWUlIiVrGyhC?==?iso-2022-jp?B?LnR4dA==?="
然后再去转换呢?要怎么取得呢?

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
6 [报告]
发表于 2009-10-22 17:40 |只看该作者
会不会是因为你的邮件的支持问题!

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
7 [报告]
发表于 2009-10-22 18:02 |只看该作者
统一uft8呢?

论坛徽章:
0
8 [报告]
发表于 2009-10-23 08:34 |只看该作者

回复 #7 ruochen 的帖子

恩,统一了
能改成utf8的都改了
在mimedefang-filter将取得的附件名转为utf8也不好使~~

论坛徽章:
0
9 [报告]
发表于 2009-10-23 08:37 |只看该作者

回复 #6 renxiao2003 的帖子

现在就是找不到原因啊~~
所以才苦恼~~
我是在想莫非是日文系统发出的邮件进入中文的邮件服务器时编码就已经出问题,转换出错了~~

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2009-10-26 09:18 |只看该作者

  1. $fname"=?iso-2022-jp?B?TUVMRGFuZHkbJEIlIiE8JSslJCVWNSFHPU14TVElXiVLJWUlIiVrGyhC?==?iso-2022-jp?B?LnR4dA==?=";
  2. if ($fname=~/=\?(\S+)\?([BQ])\?\S+\?=) {
  3.    my $lang=$1;
  4.    my $method=$2;
  5.    my $base64=$3;
  6.    if ($method eq "B") { # perl Base64 decode }  # Base64
  7.    if ($method eq "Q") { # Perl QP decode   }   # QP

  8.    # Base64/QP 問題請自己 Google 一下原理,先把 encode 過的東西還原成原始的字,將用那個字的編碼 ($lang) 去做 set names XXX, 或是用 Text::Iconv 轉成 utf8
  9.    
  10.    
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP