2016-08-23 2 views
-2

Ich versuche, das Zeichen â in einer Zeichenfolge in Objective C zu finden und es scheint nicht zu funktionieren. Es wird ein Aufzählungspunkt angezeigt, wenn es schließlich auf dem Bildschirm angezeigt wird. Vielleicht kann ich es deshalb nicht erkennen?Detect â in einer Zeichenfolge

In iOS 10 werden diese Aufzählungszeichen größer angezeigt, als sie sollten. Daher muss ich die Reichweite jedes dieser Zeichen ermitteln und sie einige Größen kleiner machen. Ich habe folgendes versucht:

[inputString contains:@"â"] 
[inputString contains:@"•"] 
[inputString contains:@"\u00b7"] 
[inputString contains:@"\u2022"] 

Die eine, die mich am meisten interessiert, ist, wenn ich kopieren und einfügen, genau aus dem API-Antwort: [inputString contains:@"â "]. Es gibt tatsächlich 4 oder 5 Leerzeichen in dieser Zeichenkette, aber sie werden beim Einfügen aus dem JSON abgeschnitten. Ich weiß nicht warum, aber ich habe das Gefühl, dass das daran liegt, dass ich nicht erkennen kann, dass die Zeichenkette dieses Zeichen enthält .

Irgendwelche Ideen, wie man mit diesem Charakter richtig umgehen kann?

Edit: Ein paar mehr Details, hier ist die Zeichenfolge, die zurück von API gesendet wird:

â All of your exclusive deals in one place\nâ More deals matched specifically to you\nâ Get alerts to know when new deals are available or your saved deals are expiring" 

Ich bemerkte etwas seltsam auch, wenn ich die Antwort bearbeiten und mit einem Hut in mehreren dieser eine ist hinzuzufügen, Sie werden in Aufzählungszeichen verschoben. Wenn ich sie jedoch im Code in die Zeichenfolge einfüge, werden sie als einfache Aufzählungszeichen angezeigt. Vielleicht werden sie irgendwie verschlüsselt? Obwohl ich nirgendwo in unserem Code sehe, wo das passieren könnte, bin ich etwas verwirrt darüber, was hier vor sich geht.

Edit 2: Hier ist ein hexdump der Linie, ist dies wahrscheinlich nützlicher, einige von Ihnen, als es ist für mich:

000026c0 6e 74 65 6e 74 22 3a 20 22 e2 97 8f 20 41 6c 6c |ntent": "... All| 
000026d0 20 6f 66 20 79 6f 75 72 20 65 78 63 6c 75 73 69 | of your exclusi| 
000026e0 76 65 20 64 65 61 6c 73 20 69 6e 20 6f 6e 65 20 |ve deals in one | 
000026f0 70 6c 61 63 65 5c 6e e2 97 8f 20 4d 6f 72 65 20 |place\n... More | 
00002700 64 65 61 6c 73 20 6d 61 74 63 68 65 64 20 73 70 |deals matched sp| 
00002710 65 63 69 66 69 63 61 6c 6c 79 20 74 6f 20 79 6f |ecifically to yo| 
00002720 75 5c 6e e2 97 8f 20 47 65 74 20 61 6c 65 72 74 |u\n... Get alert| 
00002730 73 20 74 6f 20 6b 6e 6f 77 20 77 68 65 6e 20 6e |s to know when n| 
00002740 65 77 20 64 65 61 6c 73 20 61 72 65 20 61 76 61 |ew deals are ava| 
00002750 69 6c 61 62 6c 65 20 6f 72 20 79 6f 75 72 20 73 |ilable or your s| 
00002760 61 76 65 64 20 64 65 61 6c 73 20 61 72 65 20 65 |aved deals are e| 
00002770 78 70 69 72 69 6e 67 22 2c 0d 0a 20 20 20 20 22 |xpiring",.. "| 
+0

Können Sie Ihren Antwortstring anzeigen? –

+0

Haben Sie in die Normalisierung der Saiten gesucht? https://www.objc.io/issues/9-strings/unicode/#normalization-forms – Mats

+0

Ich habe versucht, die vier Formen der normalisierten Strings ausloggen und sie alle wurden immer noch Punkte in meiner Konsole –

Antwort

1

Die Bytes e2 97 8f in Ihrem Dump ist die UTF8-Codierung von U + 25CF, BLACK CIRCLE. Bei der Interpretation als ISO-8859 oder Windows-1252 ist e2 â (ein Zirkumflex), 97 ist ein em-Strich, und 8f wird nicht verwendet.

Dies zeigt an, dass der JSON selbst UTF8 ist und irgendwo anders interpretiert wird, wahrscheinlich als eine der obigen Kodierungen. Sie müssen sowohl Ihren Code als auch die vollständige Antwort des Servers überprüfen (ein Beispiel für einen Fehler, der ein Problem verursacht, finden Sie in der Frage JSON character encoding).

+0

Das hat es geschafft! Ihre Erklärung ergibt auch einen Sinn für das, was ich gesehen habe, danke für die Hilfe und die klare Erklärung! –

1

Ich versuche, den Charakter â in einer Zeichenfolge zu erkennen

Es gibt kein "â" in Ihrem Text, also gibt es nichts zu entdecken. e2 97 8f ist ein Aufzählungszeichen "●". Ihr Problem besteht darin, dass Sie die Codierung nicht korrekt einstellen.