でそれを使用するためには、単一のマルチvCardのにアドレス帳をエクスポートしようとしている
良い日が続いている
はBEGIN:VCARD
VERSION:2.1
N:私はGIGASET Handphoneに作成され、WebGUIのエクスポート機能とそれをエクスポート例エントリ、ボブ; Bobbington
TEL; HOME:00412345689
TEL; WORK :00419876543
TEL; CELL:004112345432
END:VCARDBEGIN:VCARD
VERSION:2.1
N:NotBobと、NotBobbington
TEL; HOME:00412345689
TEL; WORK:00419876543
TEL; CELL:004112345432
END :VCARDはBEGIN:VCARDを....
私はインポートするために必要な特定のvCardを生成するためのテンプレートとしてこれを使用しますが、私はそれをインポートしようとするたびに、それはOありませんたとえそこに20のエントリがあっても、vcard全体を1人のPersonとして受け入れることができます。
私のエントリは次のようになります。
はBEGIN:VCARD
VERSION:2.1
N:マックス; Mustermann
TEL; HOME:00411234578
TEL; WORK:00411234567
TEL; CELL:00411234590
END:VCARDはBEGIN:VCARD
VERSION:2.1
N:MHUEUExを、MusterHEHEmann
TEL; HOME:00411234578
TEL; WO RK:00411234567
TEL; CELL:00411234590
END:VCARD
私は私、およびエクスポートされたvCardの間の視覚的な違いを見ることができません。
私のエントリを他のvcardにコピーすると、すぐに動作しなくなります。
しかし、私が作業中のvcard内の既存のエントリを複製すると、vcardは引き続き動作します。
ファイル全体にいくつかのKind of Encodingの問題があると思います。
また、VCard Wiki Siteで私の間違いをチェックし、いくつか修正しました。
私が試み:
は、ASCIIにVCARD文字列を減らす00
と数字に+を置換一時(数字を除く)のみアルファベットのすべての文字列(-Z & & A-Z)
をSafeCharing。
異なる行セパレータ( "\ n、\ r \ n"、System。lineSeparator())
システムデータ:
OS:
のJava-版)(最終CentOSに6.8:1.8.0_102-B14(x64)の今
は、ここに私の実際のコードです:
//Code for Address book fetching would be here
log.debug("Received : " + Addressbook.size());
File ExportFile = new File(ExportFilePath);
if(ExportFile.exists())
{
ExportFile.delete();
}
ExportFile.createNewFile();
log.debug("Writing VCards to File: " + ExportFile.getAbsolutePath());
FileWriter FW = new FileWriter(ExportFile);
Map<String, DataEntry> Properties = null;
String homephone="";
String phone="";
String mobile="";
String firstname="";
String lastname="";
StringBuilder SB = null;
String Fix="";
for(AddressbookContact AC : Addressbook)
{
log.debug("Writing: " + AC.getName());
Properties = AC.getContactProperties();
SB = new StringBuilder();
SB.append("BEGIN:VCARD");
SB.append(System.lineSeparator());
SB.append("VERSION:2.1");
SB.append(System.lineSeparator());
firstname=NameFilter(AC.getFirstname());
lastname=NameFilter(AC.getFamilyname());
SB.append("N:"+firstname+";"+lastname);
SB.append(System.lineSeparator());
homephone= Properties.get("homephone").getValue();
log.debug("Homephone: " + homephone);
if(homephone.startsWith("+")) //Test only, to exlucde existing + as an errorsource
{
//TODO: If + was source of error, write proper regex replace function
homephone="00"+homephone.substring(1, homephone.length());
}
log.debug("Filtered: " + homephone);
phone = Properties.get("phone").getValue();
log.debug("Phone: " + phone);
if(phone.startsWith("+"))
{
phone="00"+phone.substring(1, phone.length());
}
log.debug("Filtered: " +phone);
mobile= Properties.get("mobile").getValue();
log.debug("Mobile: " + mobile);
if(mobile.startsWith("+"))
{
mobile ="00"+mobile.substring(1, mobile.length());
}
log.debug("Filtered: " + mobile);
if(!homephone.isEmpty())
{
SB.append("TEL;HOME:"+homephone);
SB.append(System.lineSeparator());
}
if(!phone.isEmpty())
{
SB.append("TEL;WORK:"+phone);
SB.append(System.lineSeparator());
}
if(!mobile.isEmpty())
{
SB.append("TEL;CELL:"+mobile);
SB.append(System.lineSeparator());
}
SB.append("END:VCARD");
SB.append(System.lineSeparator());
SB.append(System.lineSeparator());
Fix = SB.toString();
Fix = Fix.replaceAll("[^\\u0000-\\uFFFF]", ""); //ASCII only
FW.write(Fix);
}
log.debug("Done!");
FW.close();
}
String NameFilter(String Entry)
{
String safeChar="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYZ";
char[] allowed = safeChar.toCharArray();
char[] charArray = Entry.toCharArray();
StringBuilder Result = new StringBuilder();
for (char c : charArray)
{
for (char a : allowed)
{
if(c==a) Result.append(a);
}
}
return Result.toString();
}
どうすればこのような問題をデバッグできますか?
シンセサイザーFabian95qw