1

我使用谷歌 api从一些数据中生成二维码。它应该代表一个VCARD 格式。我称这个网址。

当我阅读二维码时,我很好地取回了我添加到链接中的所有信息,除了一个小错误。

接线员不工作

我用Java(Android)找回了这个:

BEGIN:VCARD\nVERSION:2.1\nFN:Adam Varhegyi\nN:Adam;Varhegyi\nEMAIL:somemai@address.com\nTEL:1234567\nINTERNET:;\n\nORG:Mycompanyname\nEND:VCARD

而不是这个: (\n = 换行符)

BEGIN:VCARD\nVERSION:2.1
FN:Adam Varhegyi
N:Adam;Varhegyi
EMAIL:somemai@address.com
TEL:1234567
INTERNET:;
ORG:Mycompanyname
END:VCARD

我尝试使用这样的扫描仪来解决它:

Scanner sc = new Scanner(myVCardStringInputFromQrCode);
sc.useDelimiter("\n");
while(sc.hasNext()){
    String str = sc.next();
    Log.i("VCARD LINE: ", str);
}

而且这种方法只返回 1 行!也忽略了“\n”标记。

编辑:

我也试过用System.getProperty("line.separator"),但没用。

编辑第 2 部分:

if(myVCardStringInputFromQrCode.contains("\n")){
    Log.i("Found linebreak", "TRUE");
}
else{
    Log.i("Found linebreak", "FALSE");
}

这段代码给了我“FALSE” ——当我清楚地看到它时,Java 说它不包含“\n”。

有人知道这里发生了什么吗?

编辑第 3 部分:

由于某种原因,正确答案已被删除,因此我无法将其标记为“答案”。解决方案是“\\n”而不是“\n”,它正在工作。

4

3 回答 3

2

您可以使用System.getProperty("line.separator")

于 2013-04-13T16:05:10.163 回答
1

您看到的\n不是实际的换行符。它是一个转义的换行符(一个反斜杠,后跟一个“n”字符)。

尝试用实际的换行符替换所有出现的这种情况。请注意,您应该使用\r\n换行序列,因为这是 vCard 根据规范应该使用的换行序列。

myVCardStringInputFromQrCode = myVCardStringInputFromQrCode.replace("\\n", "\r\n");

请记住传递\\n给第一个参数而不是\n. 您需要两个反斜杠才能获得文字反斜杠。

于 2013-04-15T12:57:41.750 回答
0

\r\n而不是\n一直为我工作。

于 2013-04-13T16:11:24.577 回答