日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java vcf_Java VCF 格式解析

發布時間:2023/12/20 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java vcf_Java VCF 格式解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java VCF 格式解析

vcf可以用記事本打開,格式如下:

BEGIN:VCARD

VERSION:2.1

N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=BC=A0=E4=B8=89;;

FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=BC=A0=E4=B8=89

TEL;VOICE;PREF:1-370-000-0000

PHOTO;ENCODING=BASE64;PNG:iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAIAAABt+uBvAAAA。。。。

END:VCARD

java code:

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import javax.imageio.ImageIO;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class VCFTest {

public static void main(String[] args) {

String name = "張三";

VCFTest vt =new VCFTest();

try {

//將字符串轉換成utf-8 quoted-printable 格式

String str = vt.qpEncodeingUTF8(name);

System.out.println(str);

//將字符串utf-8 quoted-printable 格式 轉換成正常格式

str = vt.qpDecodingUTF8(str);

System.out.println(str);

String path ="d:\\aa.png";

//將圖片轉換成base64格式字符

//str = vt.BASE64Encodeing(path);

//將base64格式字符轉換成圖片

//vt.BASE64Decoding(str,"png", path);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 編碼 圖片 轉換為 BASE64

* @param path 圖片路徑

* @return 轉換后的字符串

* @throws Exception

*/

public String BASE64Encodeing(String path) throws Exception {

BASE64Encoder encoder = new BASE64Encoder();

File file = new File(path);

FileInputStream fis = new FileInputStream(file);

byte[] buffer = new byte[(int) file.length()];

fis.read(buffer);

return encoder.encode(buffer);

}

/**

* 解碼 BASE64 保存為圖片

* @param str 需要解碼的字符串

* @param imgType 解碼圖片類型

* @param path 解碼后圖片保存的位置

* @return 解碼是否完成

* @throws Exception

*/

public boolean BASE64Decoding(String str, String imgType, String path) throws Exception {

BASE64Decoder decoder = new BASE64Decoder();

byte[] ib = decoder.decodeBuffer(str);

BufferedImage bi = ImageIO.read(new ByteArrayInputStream(ib));

boolean isFinish = ImageIO.write(bi, imgType, new File(path));

bi.flush();

return isFinish;

}

/**

* 編碼 UTF8 quoted-printable

* @param str 需要編碼的字符串

* @return 編碼后的字符串

* @throws Exception

*/

public String qpEncodeingUTF8(String str) throws Exception {

if (str != null) {

char[] encode = str.toCharArray();

StringBuffer sb = new StringBuffer();

for (int i = 0; i < encode.length; i++) {

if ((encode[i] >= '!') && (encode[i] <= '~')

&& (encode[i] != '=') && (encode[i] != '\n')) {

sb.append(encode[i]);

} else if (encode[i] == '=') {

sb.append("=3D");

} else if (encode[i] == '\n') {

sb.append("\n");

} else {

StringBuffer sbother = new StringBuffer();

sbother.append(encode[i]);

String ss = sbother.toString();

byte[] buf = null;

buf = ss.getBytes("utf-8");

// UTF-8: buf.length == 3

// GBK: buf.length == 2

if (buf.length == 3) {

for (int j = 0; j < buf.length; j++) {

String s16 = String.valueOf(Integer

.toHexString(buf[j]));

char c16_6;

char c16_7;

if (s16.charAt(6) >= 97 && s16.charAt(6) <= 122) {

c16_6 = (char) (s16.charAt(6) - 32);

} else {

c16_6 = s16.charAt(6);

}

if (s16.charAt(7) >= 97 && s16.charAt(7) <= 122) {

c16_7 = (char) (s16.charAt(7) - 32);

} else {

c16_7 = s16.charAt(7);

}

sb.append("=" + c16_6 + c16_7);

}

}

}

}

str = sb.toString();

}

return str;

}

/**

* 解碼 UTF8 quoted-printable

* @param str 需要解碼的字符串

* @return 解碼后的字符串

* @throws Exception

*/

public String qpDecodingUTF8(String str) throws Exception {

if (str != null) {

StringBuffer sb = new StringBuffer(str);

for (int i = 0; i < sb.length(); i++) {

if (sb.charAt(i) == '\n' && sb.charAt(i - 1) == '=') {

sb.deleteCharAt(i - 1);

}

}

str = sb.toString();

byte[] bytes = str.getBytes("US-ASCII");

for (int i = 0; i < bytes.length; i++) {

byte b = bytes[i];

if (b != 95) {

bytes[i] = b;

} else {

bytes[i] = 32;

}

}

if (bytes != null) {

ByteArrayOutputStream buffer = new ByteArrayOutputStream();

for (int i = 0; i < bytes.length; i++) {

int b = bytes[i];

if (b == '=') {

try {

int u = Character.digit((char) bytes[++i], 16);

int l = Character.digit((char) bytes[++i], 16);

if (u == -1 || l == -1) {

continue;

}

buffer.write((char) ((u << 4) + l));

} catch (ArrayIndexOutOfBoundsException e) {

e.printStackTrace();

}

} else {

buffer.write(b);

}

}

str = new String(buffer.toByteArray(), "UTF-8");

}

}

return str;

}

}

0

2

分享到:

2012-01-03 16:47

瀏覽 7440

評論

1 樓

viptmd

2012-05-15

數字 不能編碼 ,但是能解碼

總結

以上是生活随笔為你收集整理的java vcf_Java VCF 格式解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。