[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt decodeunicode U+1D538

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

decodeunicode U+1D538

Martin Fischer
  
Beiträge gesamt: 12458

21. Apr 2021, 08:36
Beitrag # 1 von 14
Bewertung:
(1079 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Um den Hexadezimalwert (Unicode) eines Zeichens zu ermitteln, verwende ich folgende einfache Routine:

Code
var str = 'A'; 
var val = str.charCodeAt(0);
var uni = val.toString(16).toUpperCase();
$.writeln(uni);


=> 41

Bei Bedarf wird vorne mit Nullen aufgefüllt und 'U+' ergänzt.


Nun bin ich auf Zeichen gestoßen, bei denen der Unicodewerte so nicht ermittelt werden kann: https://decodeunicode.org/en/u+1D538

Die obige Routine liefert D835.
Das ist falsch.
Dieses Zeichen gibt es nicht: https://decodeunicode.org/en/u+D835

Der erwartete Wert ist vielmehr (fünfstellig) 1D538.

Wie ist dieser Wert zu ermitteln?

Viele Grüße
Martin


X

decodeunicode U+1D538

WernerPerplies
Beiträge gesamt: 2607

21. Apr 2021, 09:11
Beitrag # 2 von 14
Beitrag ID: #579610
Bewertung:
(1063 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Herr Fischer,

Vielleicht hilft Dieser Link:
https://www.compart.com/de/unicode/U+1D538

Der von Ihnen gewünschte Code kommt aus dem UTF32 Bereich.

Probieren Sie es mal hiermit:
Code
String.prototype.fill = function(number){var filled ="";for (var i=0;i<number;++i){filled += this;}return filled;} 
String.prototype.padLeft = function(fillc, length)
{if (this.length<length){return (fillc.fill(length-this.length)+this).substr(-length);}return this;}
Number.prototype.padLeft = function(fillc, length)
{return this.toString().padLeft(fillc, length);}
/*string*/ String.prototype.bytesToHexCode=function()
{
var hexString = "";
for (var i=0; i < this.length; i++)
{
hexString += this.charCodeAt(i).toString(16).toUpperCase().padLeft("0",2);
}
return hexString;
}


"IhrCode".bytesToHexCode()

Im ESTK sieht das dann so aus:
Code
"\u1D538".bytesToHexCode() 
Ergebnis: 1D5338

Ergänzt:
Alternativ habe ich aauch nuch die Routine:
Code
/*string*/ String.prototype.toUnicode=function()  
{
var unicodeString = '';
for (var i=0; i < this.length; i++)
{
var unicode = "\\u" + this.charCodeAt(i).toString(16).toUpperCase().padLeft("0",4);
unicodeString += unicode;
}
return unicodeString;
}


Verwenden Sie bitte die gleichen Includes:

In der ESTK-Konsole sieht das dann so aus:

Code
"&#7507;8".toUnicode() 
Ergebnis: \u1D53\u0038


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#579609]
(Dieser Beitrag wurde von WernerPerplies am 21. Apr 2021, 09:30 geändert)

decodeunicode U+1D538

Martin Fischer
  
Beiträge gesamt: 12458

21. Apr 2021, 09:46
Beitrag # 3 von 14
Beitrag ID: #579611
Bewertung:
(1049 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Herr Perplies,

vielen Dank für Ihre Unterstützung.

Antwort auf: Der von Ihnen gewünschte Code kommt aus dem UTF32 Bereich.


Dies hatte ich schon halb befürchtet.
Möglicherweise bedarf es deswegen auch noch einer Überprüfung, ob der Wert eines Zeichens mit dem Code aus dem UTF16- oder dem UTF32-Bereich dargestellt werden muß.


Allerdings führen beide Varianten noch nicht zu dem gewünschten Ziel.
(In den Codebeispielen verwende ich »A«, weil das spezielle Zeichen A mit dem Doppelstrich hier nicht dargestellt werden kann.)

Code
var str = 'A'; 
uni = str.bytesToHexCode();
$.writeln(uni);
// => D835DD38


Das entspricht dem UTF-16 HEX Value 0xD835DD38 in https://decodeunicode.org/en/u+1D538

Ich benötige jedoch »U+1D538«.
Das »1D538« steckt im UTF-32 HEX Value 0x0001D538.

Code
var str = 'A'; 
uni = str.toUnicode();
$.writeln(uni);
// => \uD835\uDD38



Wieso erhalte ich für das eine auszuwertende Zeichen ein kombiniertes Ergebnis?
Der Zielwert wäre »\u1D538« (so wie in der Glyphenpalette angegeben und bei dedoceunicode.org hinterlegt) statt »\uD835\uDD38«.

Viele Grüße
Martin Fischer


als Antwort auf: [#579610]
(Dieser Beitrag wurde von Martin Fischer am 21. Apr 2021, 09:47 geändert)

decodeunicode U+1D538

WernerPerplies
Beiträge gesamt: 2607

21. Apr 2021, 09:57
Beitrag # 4 von 14
Beitrag ID: #579613
Bewertung:
(1036 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

Ich weiß nicht, ob ich Ihr Problem richtig verstanden habe, Ihr Beispiel sieht bei mir im ESTK so aus:
Code
"\u1D538" 
Ergebnis: &#7507;8 -> Darstellungsproblem
"\u1D538".bytesToHexCode()
Ergebnis: 1D5338


Und das ist doch das, was Sie wollen, oder?

Die Unicode-Routine bildet UTF16-Code ab.
Code
"\u1D538".toUnicode() 
Ergebnis: \u1D53\u0038

Dass sind dann zwei Bytes.
Bei UTF8 sieht es dann noch einmal anders aus.

Hier gibt es naoch weitere Informationen:
https://dmitripavlutin.com/...-know-about-unicode/

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#579611]
(Dieser Beitrag wurde von WernerPerplies am 21. Apr 2021, 10:07 geändert)

decodeunicode U+1D538

WernerPerplies
Beiträge gesamt: 2607

21. Apr 2021, 10:42
Beitrag # 5 von 14
Beitrag ID: #579614
Bewertung:
(983 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

sorry, aber ich bin da einem Trugschluss aufgesessen,
"\u1D538".toUniCode() kann nur UTF16-Codes abbilden, d.h. ""\u1D53" +"8".

Sie müssten also vermutlich immer mit zwei Bytes arbeiten:
"surrogate pairs"

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#579611]

decodeunicode U+1D538

WernerPerplies
Beiträge gesamt: 2607

21. Apr 2021, 11:08
Beitrag # 6 von 14
Beitrag ID: #579615
Bewertung:
(959 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

ein letztes Mal zu diesem Thema von mir :-)

Hier gibt es Einiges zu diesem Thema:
https://stackoverflow.com/...ecimal-in-javascript

z. B:
Code
alert(decimalToHex(0x1D538)); 
function decimalToHex(d, padding) {
var hex = Number(d).toString(16);
padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

while (hex.length < padding) {
hex = "0" + hex;
}

return hex;
}


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#579611]

decodeunicode U+1D538

Martin Fischer
  
Beiträge gesamt: 12458

21. Apr 2021, 11:46
Beitrag # 7 von 14
Beitrag ID: #579616
Bewertung:
(944 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Ergebnis: 1D5338

Und das ist doch das, was Sie wollen, oder?


Nein, ich wollte 1D538.
Aber ich bekomme D835DD38.

Laut https://stackoverflow.com/...f-character-is-32bit wäre codePointAt() der richtige Befehl, um den ganzen 32bit Code zu erhalten. Aber der wirft bei mir einen Fehler:

Zitat Runtime Error: Error Code# 24: chr.codePointAt is not a function



Auch die Angebote in https://stackoverflow.com/...nicode-string-to-hex führten bislang nicht zum Ziel.



Soeben habe ich eine Lösung in https://stackoverflow.com/...oredirect=1&lq=1 entdeckt:

Code
function emojiUnicode (emoji) { 
var comp;
if (emoji.length === 1) {
comp = emoji.charCodeAt(0);
}
comp = (
(emoji.charCodeAt(0) - 0xD800) * 0x400
+ (emoji.charCodeAt(1) - 0xDC00) + 0x10000
);
if (comp < 0) {
comp = emoji.charCodeAt(0);
}
return comp.toString("16");
};


=> 1d538

Aber das funktioniert nur mit 32 bit Zeichen. Ein einfaches "A" gibt NaN zurück.
Das wäre allerdings abzufangen.

Zumindest mal ein Ansatz.

Viele Grüße
Martin




als Antwort auf: [#579613]

decodeunicode U+1D538

Martin Fischer
  
Beiträge gesamt: 12458

21. Apr 2021, 11:52
Beitrag # 8 von 14
Beitrag ID: #579617
Bewertung:
(932 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: ein letztes Mal zu diesem Thema von mir :-)


Das von Ihnen zitierte Schippsel liefert bei der Auswertung dieses »As mit dem Doppelstrich« auch nur ein NaN.

Mit »alert(decimalToHex(0x1D538));« funktioniert es. Aber wenn ich 1D538 schon kennen würde, müsste ich es nicht nochmal auswerten. :-)
Ich habe aber nur das A mit dem Doppelstrich.


Bislang ist die emojiUnicode-Funktion am nächsten dran.

Viele Grüße
Martin




als Antwort auf: [#579615]
(Dieser Beitrag wurde von Martin Fischer am 21. Apr 2021, 11:54 geändert)

decodeunicode U+1D538

WernerPerplies
Beiträge gesamt: 2607

21. Apr 2021, 13:36
Beitrag # 9 von 14
Beitrag ID: #579618
Bewertung:
(872 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

als doch noch mal!
Zitat Das von Ihnen zitierte Schippsel liefert bei der Auswertung dieses »As mit dem Doppelstrich« auch nur ein NaN.

Die Routine macht schon genau das was sie soll, aber nicht das, was Sie wirklich wollen.

Code
str.charCodeAt(0) 

liefert immer einen 16-Bitwert zurück und mehr nicht.

Was Sie vermutlich in Wirklichkeit suchen, ist die Codierung, die Sie benötigen, um ein Zeichen aus einem Bereich > 16-Bit auszugeben.

Das dürfte auf jeden Fall ein 2*16-Bitcode sein, binär also vier Bytes.

Damit das funktioniert, müssen sie also entweder einen Algorithmus für die Umwandlung finden, oder alternativ eine Mappingtabelle erzeugen.

Falls InDesign so etwas überhaupt kann, würde ich die Aufgabe so lösen:

Einen Textrahmen mit den Glyphen der geünschten Zeichen erzeugen und anschließend das Contents-Property des Rahmens analysieren.

Daraus kann man dann entweder den Algorithmus erkennen oder aber einfacher, aber mit Arbeit verbunden, eine Mappingtabelle erstellen.

Ich hoffe, dass meine Erklärung verständlich ist.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#579617]

decodeunicode U+1D538

Martin Fischer
  
Beiträge gesamt: 12458

21. Apr 2021, 14:36
Beitrag # 10 von 14
Beitrag ID: #579620
Bewertung:
(852 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wie oben geschrieben funktioniert es mit der emojiUnicode-Funktion Zeichen aus dem 32 Bit Bereich genau so wie ich es mir wünsche:

Code
function emojiUnicode (emoji) { 
var comp;
if (emoji.length === 1) {
comp = emoji.charCodeAt(0);
}
comp = (
(emoji.charCodeAt(0) - 0xD800) * 0x400
+ (emoji.charCodeAt(1) - 0xDC00) + 0x10000
);
if (comp < 0) {
comp = emoji.charCodeAt(0);
}
return comp.toString("16");
};


Ein Freund wies mich auf einen Beitrag hin, den ich noch nicht konzentriert lesen konnte:

What every JavaScript developer should know about Unicode

Leider funktionieren bei mir weder der dort erwähnte codePointAt()- noch fromCodePoint()-Befehl.

Viele Grüße
Martin




als Antwort auf: [#579618]
(Dieser Beitrag wurde von Martin Fischer am 21. Apr 2021, 14:38 geändert)

decodeunicode U+1D538

WernerPerplies
Beiträge gesamt: 2607

21. Apr 2021, 14:39
Beitrag # 11 von 14
Beitrag ID: #579621
Bewertung:
(843 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wie wäre es denn, wenn Sie Beispieldaten und eine genaue Beschreibung, wie Sie vorgehen, liefern würden?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#579620]

decodeunicode U+1D538

Martin Fischer
  
Beiträge gesamt: 12458

21. Apr 2021, 15:40
Beitrag # 12 von 14
Beitrag ID: #579622
Bewertung:
(785 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nach dem Umbau der emojiUnicode-Funktion mit Hilfe von »Else« funktioniert es mit 16 Bit- und mit 32 Bit-Zeichen:

Code
$.writeln(char2unicode('A')); 

function char2unicode(str)
{
var comp,
uni;
if (str.length === 1)
{
comp = str.charCodeAt(0);
}
else
{
comp = (
(str.charCodeAt(0) - 0xD800) * 0x400 +
(str.charCodeAt(1) - 0xDC00) + 0x10000
);
if (comp < 0)
{
comp = emoji.charCodeAt(0);
}
}
uni = comp.toString("16").toUpperCase();
while (uni.length < 4)
{
uni = '0' + uni;
}
return uni;
};


Das 32-Bit Zeichen können Sie aus https://decodeunicode.org/en/u+1D538 entnehmen und statt dem 'A' in »$.writeln(char2unicode('A'));« einsetzen.

Das lasse ich jetzt mal auf 800 Glyphen eines Fonts los. ;-)

Viele Grüße
Martin




als Antwort auf: [#579621]

decodeunicode U+1D538

Martin Fischer
  
Beiträge gesamt: 12458

21. Apr 2021, 15:52
Beitrag # 13 von 14
Beitrag ID: #579624
Bewertung:
(770 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super!
Das Ergebnis kann sich sehen lassen.



Viele Grüße
Martin




als Antwort auf: [#579622]
Anhang:
Bildschirmfoto.png (194 KB)

decodeunicode U+1D538

WernerPerplies
Beiträge gesamt: 2607

21. Apr 2021, 17:07
Beitrag # 14 von 14
Beitrag ID: #579625
Bewertung:
(709 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Schön, dass es jetzt klappt. Also wie ich vermutet habe, zwei Zeichen (vier Byte) als Input
Code
      comp = (  
(str.charCodeAt(0) - 0xD800) * 0x400 +
(str.charCodeAt(1) - 0xDC00) + 0x10000
);


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 16.12.2020, Version 3.XX, neue Funktionen
Kundenstimmen


als Antwort auf: [#579622]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
12.03.2021 - 16.07.2021

Digicomp Academy AG, Zürich oder virtuell
Freitag, 12. März 2021, 13.00 Uhr - Freitag, 16. Juli 2021, 17.00 Uhr

Lehrgang

Steigen Sie in die Welt des Publishings ein und erlangen Sie die Zertifizierung von publishingNETWORK. Lernen Sie in diesem Lehrgang Druckmedien professionell zu erarbeiten, druckfertige PDFs zu erstellen und CI/CD-Vorgaben umzusetzen.

Preis: CHF 6'300.-
Dauer: 18 Tage (ca. 126 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PBAS