我正在使用ez-vcard解析 Android 上的一些 VCard 文件。这些 VCard 文件是由 Android 的默认联系人应用程序生成的。现在这些 VCard 文件的问题是,这些文件包含由 Android 的 Base64
类编码的“PHOTO”属性的数据。因此,当我使用 Photo#getData() 方法时,我没有获得正确的“解码”数据。因此,我正在寻找一些解决方法,以便获取照片属性的“编码”数据字符串。任何帮助/建议将不胜感激。
编辑:我非常确定 Android 的 Base64 类正在产生问题,因为当我使用带有照片的 ez-vcard 编写 VCard 文件并尝试使用默认联系人应用程序打开此文件时,它会给出VCard 解析错误,但是当我编写由 Android 的 Base64 类编码的照片字符串时,一切正常。
为了获取编码的照片数据字符串,我还尝试使用 VCard#getExtendedProperty("PHOTO")
方法,但它返回 null。
最佳答案
Android 的 base64 函数的工作方式不同,这很奇怪。我认为,base64 算法在任何地方都应该工作相同。 o_O
如果您需要获取 PHOTO 属性的原始字符串值,您可以创建自定义抄写员和属性类,然后向解析器注册抄写员类,如下所示:
public class PhotoRawScribe extends VCardPropertyScribe<PhotoRaw> {
public PhotoRawScribe() {
super(PhotoRaw.class, "PHOTO");
}
@Override
protected VCardDataType _defaultDataType(VCardVersion version) {
return null;
}
@Override
protected String _writeText(PhotoRaw property, VCardVersion version) {
return property.getValue();
}
@Override
protected PhotoRaw _parseText(String value, VCardDataType dataType, VCardVersion version, VCardParameters parameters, List<String> warnings) {
return new PhotoRaw(value);
}
}
public class PhotoRaw extends SimpleProperty<String> {
public PhotoRaw(String value) {
super(value);
}
public static void main(String args[]) throws Exception {
String str =
"BEGIN:VCARD\r\n" +
"VERSION:4.0\r\n" +
"PHOTO:foobar\r\n" +
"END:VCARD";
VCardReader reader = new VCardReader(str);
reader.registerScribe(new PhotoRawScribe());
VCard vcard = reader.readNext();
PhotoRaw photo = vcard.getProperty(PhotoRaw.class);
System.out.println(photo.getValue()); //prints "foobar"
}
}
关于java - 如何获取ezvcard中 'encoded'照片数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676301/