Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Vcard files from Android to XP - Native language support
#1
An Android system produces contacts as .vcf files with encoding ''CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE''. I wrote a simple routine to convert this .vcf file to a readable in Windows XP format. It seems that the output file is written in a readable form. However, when I open it as .vcf file it is still in a not readable form. Any advice is mostly welcome. Many thanks in advance.

Macro temp03
Trigger SF9     Help - how to add the trigger to the macro
Code:
Copy      Help
str sinp="C:\tmp\pst\vcard.vcf"
str sout="C:\tmp\pst\vcardo.vcf"
str stxt stxto
out
stxt.getfile(sinp)

str s sc
int j
str sf=";CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:"
int l=sf.len
foreach s stxt
,j=find(s sf)
,if j>0
;,,out s
,,sc.get(s j+l)
;,,out sc
,,sc.QuotedPrintableEncodingUtf_8Q(1)
,,_s.left(s j)
,,s.from(_s ":" sc)
,,out s
,stxto.formata("%s[]" s)

;out stxto
stxto.setfile(sout)
out stxto
_s.getfile(sout)
out _s

Member function str.QuotedPrintableEncodingUtf_8Q
Code:
Copy      Help
;/
function$ action [$charset] ;;action: 0 encode, 1 decode - Charset 0 suitable for =?utf-8?Q?

;Encodes or decodes text of this variable using quoted-printable encoding.
;Returns self.

;Example :
;str s
;;From: =?UTF-8?Q?=22=CE=9C=CF=80=CE=B1=CE=BB=CE=BB=CE=AE=CF=82_=CE=91=CE=BB=CE?= =?UTF-8?Q?=AD=CE=BE=CE=B1=CE=BD=CE=B4=CF=81=CE=BF=CF=82=22?= <[email protected]>
;s="=22=CE=9C=CF=80=CE=B1=CE=BB=CE=BB=CE=AE=CF=82_=CE=91=CE=BB=CE=AD=CE=BE=CE=B1=CE=BD=CE=B4=CF=81=CE=BF=CF=82=22 <[email protected]>" ;; Recipient
;out s.QuotedPrintableEncodingBeeSES(1)
;s="=CE=95=CE=98=CE=9D=CE=99=CE=9A=CE=9F_=CE=9C=CE=95=CE=A4=CE=A3" ;; subject
;out s.QuotedPrintableEncodingBeeSES(1)

if(!this.len) ret this
MailBee.Message m._create

sel action
,case 0
,m.BodyText=this ;;does not respond to charset etc. Always uses default codepage/charset of current user.
,_s=m.RawBody
,
,case 1
,m.RawBody=_s.from(m.RawBody this)
,m.BodyEncoding=3 ;;at first encode base64, because if 0 (no encoding), wraps lines
,_s=m.RawBody
,
,case else ret this

;remove headeds
int i=find(_s "[][]")
if i>=0
,i+4
,if(action=0) this.get(_s i)
,else this.decrypt(4 _s+i); if(_unicode and charset) this.ConvertEncoding(0 _unicode)

err+ end _error
ret this


Attached Files
.zip   vcard.zip (Size: 302 bytes / Downloads: 318)


Forum Jump:


Users browsing this thread: 1 Guest(s)