Programme qui donne le code unicode des caractères arabes saisis

Soyez le premier à donner votre avis sur cette source.

Vue 21 721 fois - Téléchargée 1 331 fois

Description

Ceux qui ont déjà voulu utiliser l'arabe dans leur application ont toujours eu un problème au début, car ça affichait des caractères bizarres, et il fallait utiliser le code Unicode. C'est pas très pratique de chercher le code Unicode pour chaque caractère; ce petit programme vous permet de saisir une phrase en arabe, et en cliquant sur le bouton transformer, il vous donne son code, et puis vous n'avez qu'à cliquer sur le bouton copier, et le coller dans votre source.

Source / Exemple :


/*TODO

  • Il reste d'autres caractères waw avec hamza et co
  • /
import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; import java.util.*; import java.io.File; public class ArabicToUnicode extends JFrame { private JTextField txtArab = null; private JTextArea txtUnicode = null; private JButton btnTranslate = null, btnToClipboard = null; private JScrollPane scroll = null; private JPanel pnTop = null, pnCenter = null, pnKeyboardAr = null; private int w, h, x, y; private ArrayList<String> characters = null; private ArrayList<JButton> buttonsKeyboard = null; public ArabicToUnicode() { super("ArabicToUnicode"); /*Enumeration keys = UIManager.getDefaults().keys(); while(keys.hasMoreElements()) System.out.println(keys.nextElement());*/ characters = new ArrayList<String>(); //La liste des caractères saisies w = 600; h = 530; x = ((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()-w)/2; y = ((int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()-h)/2; Font f_albattar = null; try{ //Cette Font n'est pas enregistré dans le système, on doit donc la créer f_albattar = Font.createFont(Font.TRUETYPE_FONT , new File("ae_AlBattar.ttf")); } catch (Exception e){ e.printStackTrace(); } txtArab = new JTextField(70); txtArab.setPreferredSize(new Dimension(500, 28)); if (f_albattar != null) txtArab.setFont(f_albattar.deriveFont(14f)); //Je précise un PlainDocument personnalisé pour surveiller l'insertion et la suppression dans le JTextField (voir la classe plus loin) txtArab.setDocument(new MyPlainDocument()); //Le texte du bouton est en arabe, donc ce que vous voyez est le code unicode btnTranslate = new JButton("\u062d\u064e\u0648\u0651\u0650\u0644\u0652"); btnTranslate.setPreferredSize(new Dimension(70, 28)); if (f_albattar != null) btnTranslate.setFont(f_albattar.deriveFont(Font.BOLD, 12f)); btnTranslate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { for (int i = 0; i < characters.size(); i++) { // if (characters.get(i).equals(" ")) txtUnicode.append(" "); else txtUnicode.append(getUnicode(characters.get(i)));//Pour chaque caractère dans la liste, on récupère son code } // Unicode, et on l'ajoute à la JTextArea txtArab.setText(""); // Et finalement, on vide la JTextField } }); SpringLayout springLayoutTop = new SpringLayout(); pnTop = new JPanel(springLayoutTop); pnTop.setPreferredSize(new Dimension(w, 50)); pnTop.setMaximumSize(new Dimension((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), 50)); springLayoutTop.putConstraint(SpringLayout.WEST, txtArab, 10, SpringLayout.WEST, pnTop); springLayoutTop.putConstraint(SpringLayout.NORTH, txtArab, 10, SpringLayout.NORTH, pnTop); springLayoutTop.putConstraint(SpringLayout.WEST, btnTranslate, 10, SpringLayout.EAST, txtArab); springLayoutTop.putConstraint(SpringLayout.NORTH, btnTranslate, 10, SpringLayout.NORTH, pnTop); springLayoutTop.putConstraint(SpringLayout.EAST, pnTop, 10, SpringLayout.EAST, btnTranslate); pnTop.add(txtArab); pnTop.add(btnTranslate); txtUnicode = new JTextArea(5, 50); scroll = new JScrollPane(txtUnicode); btnToClipboard = new JButton("\u0625\u0650\u0646\u0652\u0633\u064e\u062e\u0652"); if (f_albattar != null) btnToClipboard.setFont(f_albattar.deriveFont(Font.BOLD, 12f)); btnToClipboard.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { try{ //On récupère le presse-papier du système Clipboard clipBrd = Toolkit.getDefaultToolkit().getSystemClipboard(); // On copie le contenu de la JTextArea dans le presse-papier du système clipBrd.setContents(new StringSelection(txtUnicode.getText()), null); } catch(Exception e){ e.printStackTrace(); } } }); SpringLayout springLayoutCenter = new SpringLayout(); pnCenter = new JPanel(springLayoutCenter); pnCenter.setPreferredSize(new Dimension(w, 150)); pnCenter.setMaximumSize(new Dimension((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), 150)); springLayoutCenter.putConstraint(SpringLayout.WEST, scroll, 10, SpringLayout.WEST, pnCenter); springLayoutCenter.putConstraint(SpringLayout.EAST, pnCenter, 10, SpringLayout.EAST, pnTop); springLayoutCenter.putConstraint(SpringLayout.EAST, pnCenter, 10, SpringLayout.EAST, scroll); springLayoutCenter.putConstraint(SpringLayout.WEST, btnToClipboard, 0, SpringLayout.WEST, scroll); springLayoutCenter.putConstraint(SpringLayout.NORTH, btnToClipboard, 10, SpringLayout.SOUTH, scroll); pnCenter.add(scroll); pnCenter.add(btnToClipboard); //SpringLayout springLayoutKeyboard = new SpringLayout(); pnKeyboardAr = new JPanel(new GridLayout(5, 12)); buttonsKeyboard = new ArrayList<JButton>(); buttonsKeyboard.add(new JButton("\u0622")); buttonsKeyboard.add(new JButton("\u0627")); buttonsKeyboard.add(new JButton("\u0623")); buttonsKeyboard.add(new JButton("\u0625")); buttonsKeyboard.add(new JButton("\u0621")); buttonsKeyboard.add(new JButton("\u0628")); buttonsKeyboard.add(new JButton("\u062A")); buttonsKeyboard.add(new JButton("\u0629")); buttonsKeyboard.add(new JButton("\u062B")); buttonsKeyboard.add(new JButton("\u062C")); buttonsKeyboard.add(new JButton("\u062D")); buttonsKeyboard.add(new JButton("\u062E")); buttonsKeyboard.add(new JButton("\u062F")); buttonsKeyboard.add(new JButton("\u0630")); buttonsKeyboard.add(new JButton("\u0631")); buttonsKeyboard.add(new JButton("\u0632")); buttonsKeyboard.add(new JButton("\u0633")); buttonsKeyboard.add(new JButton("\u0634")); buttonsKeyboard.add(new JButton("\u0635")); buttonsKeyboard.add(new JButton("\u0636")); buttonsKeyboard.add(new JButton("\u0637")); buttonsKeyboard.add(new JButton("\u0638")); buttonsKeyboard.add(new JButton("\u0639")); buttonsKeyboard.add(new JButton("\u063A")); buttonsKeyboard.add(new JButton("\u0641")); buttonsKeyboard.add(new JButton("\u0642")); buttonsKeyboard.add(new JButton("\u0643")); buttonsKeyboard.add(new JButton("\u0644")); buttonsKeyboard.add(new JButton("\u0645")); buttonsKeyboard.add(new JButton("\u0646")); buttonsKeyboard.add(new JButton("\u0647")); buttonsKeyboard.add(new JButton("\u0648")); buttonsKeyboard.add(new JButton("\u064A")); buttonsKeyboard.add(new JButton("\u064B")); buttonsKeyboard.add(new JButton("\u064D")); buttonsKeyboard.add(new JButton("\u064E")); buttonsKeyboard.add(new JButton("\u064F")); buttonsKeyboard.add(new JButton("\u0650")); buttonsKeyboard.add(new JButton("\u0651")); buttonsKeyboard.add(new JButton("\u0652")); buttonsKeyboard.add(new JButton("\u0660")); buttonsKeyboard.add(new JButton("\u0661")); buttonsKeyboard.add(new JButton("\u0662")); buttonsKeyboard.add(new JButton("\u0663")); buttonsKeyboard.add(new JButton("\u0664")); buttonsKeyboard.add(new JButton("\u0665")); buttonsKeyboard.add(new JButton("\u0666")); buttonsKeyboard.add(new JButton("\u0667")); buttonsKeyboard.add(new JButton("\u0668")); buttonsKeyboard.add(new JButton("\u0669")); if (f_albattar != null) for (int i = 0; i < buttonsKeyboard.size(); i++) buttonsKeyboard.get(i).setFont(f_albattar.deriveFont(30f)); for (int i = 0; i < buttonsKeyboard.size(); i++) { pnKeyboardAr.add(buttonsKeyboard.get(i)); buttonsKeyboard.get(i).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { //Puisque je n'ai pas précisé l'actioncommand des boutons, getActionCommand() retourne le texte des boutons txtArab.setText(txtArab.getText()+ae.getActionCommand()); txtArab.requestFocusInWindow(); //On remet le focus dans la zone de texte } }); } setContentPane(new Box(BoxLayout.PAGE_AXIS)); getContentPane().add(pnTop); getContentPane().add(Box.createVerticalStrut(10)); getContentPane().add(pnCenter); getContentPane().add(Box.createVerticalStrut(10)); getContentPane().add(pnKeyboardAr); //getContentPane().add(Box.createVerticalGlue()); Locale l = new Locale("ar"); //L'orientation de la fenêtre et de ses enfants (droite->gauche) applyComponentOrientation(ComponentOrientation.getOrientation(l)); setLocale(l); //On définit la Locale de la JFrame comme étant l'arabe txtUnicode.setLocale(Locale.FRENCH);////On définit la Locale de la JTextArea comme étant le français. (pas besoin de l'arabe) txtUnicode.applyComponentOrientation(ComponentOrientation.getOrientation(Locale.FRENCH)); setBounds(x, y, w, h); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } private class MyPlainDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str.equals(" ") || (str.codePointAt(0) >= 0x600 && str.codePointAt(0) <= 0x6ff))//Les caractères arabes sont compris entre { //0600 et 06FF (hexadécimal bien sûr) for(int i = 0; i < str.length(); i++) { characters.add(str.substring(i, i+1)); //On remplit notre liste } super.insertString(offs, str, a); } else { JOptionPane.showMessageDialog(ArabicToUnicode.this, "This is not an arabic character.", "\u0625\u0646\u0630\u0627\u0631", JOptionPane.WARNING_MESSAGE); } } public void remove(int offs, int len) throws BadLocationException { for (int i = offs; i < offs+len; i++) //Les éléments de l'ArrayList sont décalés à gauche après chaque suppression, characters.remove(offs); //par exp, on a remove(1, 3), on supprime d'abord l'élément 1, décalage à gauche, super.remove(offs, len); // l'élément 2 prends la place 1, et ainsi de suite. } } private String getUnicode(String arChar) { // La méthode codePointAt(int i) de la classe String retourne le code unicode du caractère à l'index i en décimal // La méthode Integer.toHexString(int code) retourne la chaine qui représente l'argument int en héxadécimal String code = "\\u0" + Integer.toHexString(arChar.codePointAt(0)); return code; } public static void main(String[] args) { //Je change le texte affiché par le bouton ok de la JOptionPane UIManager.put("OptionPane.okButtonText", "\u0645\u0648\u0627\u0641\u0642"); SwingUtilities.invokeLater(new Runnable(){ public void run() { new ArabicToUnicode(); } }); } }

Conclusion :


Je pense ajouter quelques bouton au programme comme un petit clavier pour ceux comme moi qui n'ont pas l'habitude du clavier arabe.

J'espère que ce code vous aidera un peu.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_ilaf
Messages postés
1
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
31 décembre 2011

bravo bon travail
Pasokoniidesuka
Messages postés
21
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
17 janvier 2012

Salut les amis arabophones.
Plutôt que de chercher le code Unicode pour les caractères arabes il faudrait plutôt chercher à comprendre comment afficher ces caractères dans vos applications.
Je ne suis pas concerné par les caractères arabes mais comme je suis japonisant je cherche toujours à écrire en japonais dans mes applis et donc on revient au même problème que pour l'arabe.
Une solution que j'avais trouvé était d'ajouter des paramètres pour préciser qu'on utilise UTF-8 et pas cp-1252 sous Windows.
Avec Linux pas de problème quand le système est déjà géré en UTF-8 (ce qui est courant de nos jours).
En interne Java utilise Unicode mais je crois que c'est UTF-16. Enfin bref quand vous manipulez vos flux il faut préciser UTF-8 ou un autre codage qui va bien.
Voilà. J'espère que ces petits conseils pourront vous servir.
kariminf
Messages postés
3
Date d'inscription
jeudi 19 février 2009
Statut
Membre
Dernière intervention
19 février 2009

salam
Merci pour cette application, elle m'a aidé de comprendre comment on code les carèctères arabes dans l'unicode.
abido11
Messages postés
12
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
26 juillet 2014

mais ca marche pa mon ami
j'ai déja vu ta réponse merci en tt cas
herisch
Messages postés
10
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
31 juillet 2008
1
t'as déjà posté sur le forum developpez, et je t'ai répondu.
va y faire un tour

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.