JavaScript Split funktioniert nicht bei Russisch?

2 Antworten

Ja, ist leider n Problem in js, es gibt dafür wohl eine library names grapheme splitter oder so ähnlich oder du nutzt new Intl.Segmenter() was genau das macht was du suchst, allerdings ist das wiederum in Firefox nicht supported.

Grapheme wird denk ich auch das Keyword sein nach dem du suchst, danach musst du splitten wenn du so was haben möchtest.

Text ist leider nicht immer so Simpel wie man denkt, manche emojis bestehen technisch gesehen z.B. auch aus mehreren einzelnen emojis die mit unsichtbaren Zeichen zusammengefügt werden. Z.B. 🏳️‍🌈 besteht aus 🏳️🏳️‍🌈 (und wird so auch angezeigt sollte deine Platform das 🏳️‍🌈 nicht supporten). Bei á ist das natürlich etwas anders, aber ich denke so was veranschaulicht gut, dass Text splitten komplizierter ist bzw. sein kann als es aussieht.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter

Woher ich das weiß:Berufserfahrung – Software Entwickler / Devops

Lenzer66u 
Beitragsersteller
 14.11.2022, 13:41

Ich habe jetzt versucht es in PHP u lösen aber da funktioniert selbst der Count also die Anzahl der Länge des Strings nicht da ist zum Beispiel count("а́а́а́") = 12.

0
BeamerBen  14.11.2022, 14:03
@Lenzer66u

Über die erwähnte Lib und das Intl.Segmenter Objekt würde es ja funktionieren - brauchst halt entweder ne externe lib oder musst eben damit leben, keinen FF support zu haben.

Für die meisten Sprachen gibt es für diesen Zweck eben Libraries. PHP würde ich generell nicht nehmen, aber das ist ne persönliche Einstellung.

0
elmex7  14.11.2022, 19:28
@Lenzer66u

Zu PHP: count() ist da auch falsch. Nutze strlen bzw besser noch mb_strlen und zum Teilen z.B. mb_split

0
Lenzer66u 
Beitragsersteller
 14.11.2022, 19:31
@elmex7

hab alle 3 versucht. Funktioniert keines richtig wie es soll

0
elmex7  14.11.2022, 21:57
@Lenzer66u

Poste doch mal den verwendeten String und Code dazu, dann können wir uns das ja mal genauer anschauen

0
BeamerBen  14.11.2022, 23:52
@elmex7

euch ist beiden klar, dass ich in der Antwort eine Lib genannt habe die das löst oder? https://github.com/orling/grapheme-splitter

Warum ihr da mit PHP rum machen wollt ist absolut unverständlich, das behavior habt ihr bei den meisten modernen Programmiersprachen, das ist alles völlig normal.

Puh.

1
Von Experte BeamerBen bestätigt

Siehe die Warning hier:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

Warning: When the empty string (
""
) is used as a separator, the string is not split by user-perceived characters (grapheme clusters) or unicode characters (codepoints), but by UTF-16 codeunits. This destroys surrogate pairs. See "How do you get a string to a character array in JavaScript?" on StackOverflow.

Entsprechend musst du anders vorgehen, wenn du die surrogate pairs erhalten möchtest:

https://stackoverflow.com/questions/4547609/how-to-get-character-array-from-a-string/34717402#34717402


Lenzer66u 
Beitragsersteller
 14.11.2022, 11:03

ich bekomm es leider nicht hin ein kleines Beispiel würde sehr helfen.

0
Destranix  14.11.2022, 11:22
@Lenzer66u

Hm, stimmt, geht bei mir auch nicht. So ein Mist.

ich schaue da gleich noch einmal genauer nach.

0
Destranix  14.11.2022, 11:29
@Lenzer66u

Ah okay, das

́

gehört nicht zum eigentlichem Character, sondern ist ein extra Zeichen, deshalb wird das auch extra ausgegeben.

0
Lenzer66u 
Beitragsersteller
 14.11.2022, 11:33
@Destranix

ja aber wie umgehe ich das? Das der aus а́ nicht 'а', '́ ' macht?

0
Destranix  14.11.2022, 11:35
@Lenzer66u

Garnicht. Das soll so.

Sonst muss du das "Apostroph" weglassen.

0
Lenzer66u 
Beitragsersteller
 14.11.2022, 11:52
@Destranix

Ich bin dabei einen Sprachenerkenner zu programmieren. Ich gebe mehrere Texte mit der dazugehörigen Sprache zum Lernen ein und danach einen Text der analysiert werden soll. Das hat auch mit deutsch und englisch alles geklappt nur jetzt halt mit diesen besonderen Zeichen wie zum Beispiel "а́" bei russisch funktioniert es nicht mehr wegen dem Splitting der besonderen Zeichen.

0
Destranix  14.11.2022, 11:53
@Lenzer66u

Dann solltest du deinen Spracherkenner so umschreiben dass er auch mit Zeichen klarkommt, die mit mehr als einem Zeichen codiert werden. Kommt in anderen Sprachen noch häufiger vor als im russischem.

0