Pracuję nad tworzeniem spisu treści dla pokładów slajdów Google. Rozwiązałem wiele problemów, ale jeden zjeżdżalnia znalazłem (czyjeś inne) wyniki w pozornie pustym wpisie tekstu w stole zawartości. Jeśli skopiuję wpis do notatnika, wygląda jak kwadrat z znakiem zapytania w nim. Przeczytałem w wielu miejscach, jest to niepruniany charakter. Chciałbym włączyć wszystkie znaki do druku w stole zawartości bez względu na język, w którym się znajduję. Chcę też zachować rzeczy, takie jak znaki towarowe i symbole praw autorskich. Spodziewam się, że niektórzy ludzie będą obejmować emojis w ich slajdach, ale jeszcze tego nie przetestowałem. Jeśli przejdą przez widoczność w stole zawartości, będzie dobrze.

Są to rzeczy, które próbowałem usunąć znaki do druku). Moja tajemnicza postać przechodzi.

let beforeTxt = txtBack;
txtBack = beforeTxt.replace(/[^0-9a-z\u0600-\u06FF]/gi, " "); // reserves Arabic characters https://stackoverflow.com/questions/9364400/remove-not-alphanumeric-characters-from-string
if (beforeTxt != txtBack)
  console.log("1 + + + + + + + hidden char in text: ; ", beforeTxt);

beforeTxt = txtBack;
txtBack = beforeTxt.replace("/[^0-9a-z\u0600-\u06FF]/gi", " "); // reserves Arabic characters https://stackoverflow.com/questions/9364400/remove-not-alphanumeric-characters-from-string
if (beforeTxt != txtBack)
  console.log("2 + + + + + + + hidden char in text: ; ", beforeTxt);

beforeTxt = txtBack;
txtBack = beforeTxt.replace("[^\x00-\x7F]/", " "); // replace unprintable char with space
if (beforeTxt != txtBack)
  console.log("3 + + + + + + + hidden char in text: ; ", beforeTxt);

beforeTxt = txtBack;
txtBack = beforeTxt.replace("[^\x00-\x7F]/", "gi", " "); // replace unprintable char with space
if (beforeTxt != txtBack)
  console.log("4 + + + + + + + hidden char in text: ; ", beforeTxt);

beforeTxt = txtBack;
// this invisible character looks like a question mark in a box if copied into notepad
txtBack = beforeTxt.replace("", " "); // replace unprintable char with space
if (beforeTxt != txtBack)
  console.log("5 + + + + + + + hidden char in text: ; ", beforeTxt);

Czy robię to nieprawidłowo? Nie ma ograniczenia liczby głupich rzeczy, które ludzie mogą zawierać na slajdach. To, co chcę, jest dla tekstu w tabeli treści, aby być widocznym.

0
aNewb 24 marzec 2021, 00:19

1 odpowiedź

Najlepsza odpowiedź

Możesz użyć String.charCodeAt() próbować zidentyfikować postać.

Więc jeśli znasz lokalizację postaci, którą możesz:

// you already have a variable "stringWithUnknownChar"

let unknownChar = stringWithUnknownChar[5] // if the char is at index 5

let unknownCharCode = stringWithUnknownChar.charCodeAt(5)

Zakłada to, że nie masz żadnego sposobu, aby dowiedzieć się, co była oryginalna postać, prawda?

Jeśli źródło już zawarte jest to Blok Unicode wtedy jest to prawdopodobne, że oryginalny kodowanie znaków było Zgubiony, ponieważ "nieznana postać" jest renderowana jako U+FFFx niezależnie od tego, co było, a więc, kiedy je skopiujesz, po prostu skopiujesz kod dla "nieznanej postaci".

Jeśli tak jest, niestety nie byłoby sposobu, aby uczynić tę postacią, ponieważ nie ma odniesienia do tego, co było.

EDYTOWAĆ:

Na podstawie twojego komentarza możesz przejść przez różne znaki zastępcze i dowiedzieć się, jaki kod CHAR odpowiada ich w JavaScript, dzięki czemu możesz je filtrować w sposób, w jaki zacząłeś podchodzić do niego powyżej. Na przykład

console.log("�".charCodeAt(0)) // gives 65533
console.log("􏿾".charCodeAt(0)) // gives 56319

Więc możesz zrobić coś takiego:

let txtBack = beforeTxt.replace(String.fromCharCode(65533)," ");

Jeśli te kody nie są właściwe, możesz spróbować innych znaków zastępczych z powiązanego artykułu Wikipedii.

Źródło

0
iansedano 25 marzec 2021, 17:07