Api للتحويل من نص عربي او انجليزي ال Unicode
السلام عليكم
عزيز محمد بامكانك التحقق من امكانية التحويل بواسطة الطريقة التالية
public static void main(String[] args) {
System.out.println(canEncode(' '));
System.out.println(canEncode('م'));
System.out.println(canEncode('k'));
System.out.println(canEncode(','));
System.out.println(canEncode('8'));
}
public static boolean canEncode(char c){
CharsetEncoder ce = Charset.forName("ASCII").newEncoder();
return ce.canEncode(c);
}النتيجة
true false true true true
كما انه يمكنك تجزئة رموز utf بالطريقة التالية ( لم اجربها فعليا على برنامجك ولكني احاول ان اساهم في تطوير الصنف )
String testString = "ab\\u0639\\u062B\\u0645\\u0627\\u0646 l م 7 3";
Pattern p=Pattern.compile("\\p{XDigit}{4}");
Matcher m=p.matcher(testString);
while (m.find()){
System.out.println(m.group());
}
System.out.println(testString);وشكرا
شباب انا في حاجة الى هذا الصنف .
هل ممكن احصل على نسخة نهائية منه
العيافـي كتب:شباب انا في حاجة الى هذا الصنف .
هل ممكن احصل على نسخة نهائية منه
سلام يا عيافي
على ما اذكر ان المشاركة الاولى كنت عدّلتها بأخر تحديث (27-7-2010)
/index.php?showtopic=204349&view=findpost&p=1014544
تحياتي
السلام عليكم
جميل جدا النقاش
تعاملت مع دالة مشابهة بالنسبة للفيجوال دوت نت للتحويل للهيكسا
وانا منذ شهر في صراع مع اليونيكود
وقد تغلبت عليه عدة جولات وبقيت الجولة الاخيرة التي تستعصي علي حتى الان وبدأت ارى ان الامر يتعقد
الموضوع
ar?hb? ?' 10?@ ? ?hb@??J@@? ?@?@?@ ? @Y@L
هذه جملة بالعربي
طبعا الى الان لا اعرف اين مكمن الحل ولكنني بعد البحث والتنقيب توصلت الى ان القضية هي في الترميز
ASCII UCS2 HEX, UTF8, 8859-1
تحديداUCS2 ربما في
هل من تراميز اخرى للتعامل مع اللغة العربية
ألا بذكر الله تطمئن القلوب
شكرا لك اخي محمد
عزيزي محمد
قمت باستخدام هذا الصنف
ولاحظت ان (السطر الجديد) يتم تجاهله للتحويل من العربي الى يونيكود
كما انه يتم تجاهل "\" عند التحويل من اليونيكود الى العربي
بالنسبة لموضوع السطر الجدي صراحة لا اجد فيه مشكلة (اذا لم تزل المكلة موجودة لديك ارجو التوضيح)
اما بالنسبة ل "\"
تستطيع حلها هكذا
في الدالة encode
اضف السطر الشرط التالي:
if (c < 32 || c > 126 || c == 92) {// \ == 92لتصبح هكذا
public static String encode(String text) {
if (text == null || text.length() <= 0) {
return null;
}
int textLen = text.length();
StringBuilder buffer = new StringBuilder(textLen * 4);
for (int i = 0; i < textLen; i++) {
char c = text.charAt(i);
if (c < 32 || c > 126 || c == 92) {// \ == 92
buffer.append(toUnsignedString(text.charAt(i)));
} else {
buffer.append(c);
}
}
return buffer.toString();
}ارجو ان تكون مفيدة
أعرف أني اتيت متأخر جدا على الموضوع..
لكن عندي سؤال وبصراحه محرج من السؤال. ما الحاجه لاستخدام هذه المكتبه, لاحظت من ردودك يا محمد انك مهتم بأن تعمل على JME فهل ممكن ذكر بعض الحالات التي تستخدمونها فيها سواء في JME او JSE.
مهدي حجازي كتب:أعرف أني اتيت متأخر جدا على الموضوع..
لكن عندي سؤال وبصراحه محرج من السؤال. ما الحاجه لاستخدام هذه المكتبه, لاحظت من ردودك يا محمد انك مهتم بأن تعمل على JME فهل ممكن ذكر بعض الحالات التي تستخدمونها فيها سواء في JME او JSE.
اعتقد فى الـ JavaME مثلا فى ارسال المتغيرات الى سيرفر كالتسجيل مثلا
انما فالـ JavaSE فهى لضمان ان اللغه العربيه تم حفظها بشكل سليم
يعنى انا عن نفسى لو فيه ملف وحفظته على جهازى بدون اختيار ان يكون UTF-8
افتح الملف اجده عباره عن ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
كله علامات استفهام
وبالتالى لم استطع قرائه الملف
انما عندما يكون اكواد و رموز
فاقوم بعمل تتغيير للـ Unicode واتمكن من قرائته
هذا ما لدى فى هذه النقطه
ان شاء الله
اخ محمد والاخوه يفيدونا بالمزيد
دمتم فى رعايه الله وامنه
اقتباساعتقد فى الـ JavaME مثلا فى ارسال المتغيرات الى سيرفر كالتسجيل مثلا
لا أظن ذلك، أنا لم أواجه هذه المشكله رغم أني أقوم بارسال البيانات الى PHP Server Side وليس الى Java Server Side والتي يمكنها ان تخلق مشاكل أكثر.
اقتباسنما فالـ JavaSE فهى لضمان ان اللغه العربيه تم حفظها بشكل سليميعنى انا عن نفسى لو فيه ملف وحفظته على جهازى بدون اختيار ان يكون UTF-8
افتح الملف اجده عباره عن ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
كله علامات استفهام
وبالتالى لم استطع قرائه الملف
انما عندما يكون اكواد و رموز
فاقوم بعمل تتغيير للـ Unicode واتمكن من قرائته
هذا سوف يحدث اذا قمت بوضع النصوص في ملفات الكود, وما أعلمه أن كل IDE له Default Encoding يمكنك وضعها على UTF-8 وينتهي الأمر, هذا على فرض أني قمت بمثل هذا العمل وهو ما لا يجب أن يحدث بل يجب وضع النصوص دائما في ملفات خارجيه وعندها لن تحدث المشكله من الاساس لانك ستستخدم encdoing صحيح وحتى لو أخطئت فانها لن تتحول الى ???? داخل الملف الأصلي.
هل هناك حالات أخرى تستخدمونها من أجل ذلك؟
تم تعديل هذه المشاركة بواسطة مهدي حجازي في 27 نوفمبر 2010 في 14:06
يعنى انا لو عملت ملف txt عادى
وكتبت فيه مثلا
كدا واردت ان احفظه
يظهر لى الرساله التاليه
ان دوست على ok فبالتالى انا استخدمت الـ default encoding
وعند فتح الملف مره اخرى يظهر هكذا
لكن ان ضغطت على cancel فانه يظهر لى النافذه الخاصه بالحفظ
ومنها اختار UTF-8
وبالتالى عند فتح الملف مره اخرى يظهر بالشكل الصحيح
هذا ما اقصده اخى مهدى
لا أدري كيف قمت بذلك. أول مره أشاهد هذا التحذير, هل قمت بكتابه البسمله بيدك أم قمت بنقلها من مكان أخر. أنا عندي يخزنها بشكل طبيعي ف ANSI يسمح بكتابه اللغه العربيه دون مشاكل ولا يقوم بأي حال من الأحوال بتحويلها الى ؟؟؟
اقتباسما الحاجه لاستخدام هذه المكتبه, لاحظت من ردودك يا محمد انك مهتم بأن تعمل على JME فهل ممكن ذكر بعض الحالات التي تستخدمونها فيها سواء في JME او JSE.
عند التعامل مثلا مع ملفات properties، وتحميلها في كائن Properties. الطريقة load التي تقوم بتحميل الملف تستعمل ISO 8859-1 encoded stream. لذلك يجب تخزين الحروف غير اللاتينية على شكل كود unicode
اقتباسThe load(Reader) / store(Writer, String) methods load and store properties from and to a character based stream in a simple line-oriented format specified below. The load(InputStream) / store(OutputStream, String) methods work the same way as the load(Reader)/store(Writer, String) pair, except the input/output stream is encoded in ISO 8859-1 character encoding. Characters that cannot be directly represented in this encoding can be written using Unicode escapes ; only a single 'u' character is allowed in an escape sequence. The native2ascii tool can be used to convert property files to and from other character encodings.
وأيضا بالنسبة ل ResourceBundle التي تُستعمل عادة في واجهة متعددة اللغات، وهي تستعمل أيضا ملفات properties، وينطبق عليها نفس القيد، أي إمكانية قراءة الترميز ISO 8859-1 فقط
اقتباسThe ResourceBundle properties file must be encoded with ISO-8859-1, not UTF-8. The fancy characters must be encoded with \uxxxx form. You can compose the file in some national encoding then use native2ascii.exe.
تم تعديل هذه المشاركة بواسطة herch في 28 نوفمبر 2010 في 01:32
صراحة يا مهدي في وقت صناعتها كنت في حاجة لها، لكن حاليا احاول تذكر السبب لكن لم اتذكر
---
صراحة لم اكن اعرف الذي تكلّم عنه عصام جزاه الله كل خير
---
مهدي، هل يوجد استخدام لها في ال JavaME ؟؟
مهدي حجازي كتب:لا أدري كيف قمت بذلك. أول مره أشاهد هذا التحذير, هل قمت بكتابه البسمله بيدك أم قمت بنقلها من مكان أخر. أنا عندي يخزنها بشكل طبيعي ف ANSI يسمح بكتابه اللغه العربيه دون مشاكل ولا يقوم بأي حال من الأحوال بتحويلها الى ؟؟؟
لالالا انا كتبتها بايدى
عملت ملف جديد وكتبت فيه
.S.T.A.L.K.E.R كتب:صراحة يا مهدي في وقت صناعتها كنت في حاجة لها، لكن حاليا احاول تذكر السبب لكن لم اتذكر
---
صراحة لم اكن اعرف الذي تكلّم عنه عصام جزاه الله كل خير
---
مهدي، هل يوجد استخدام لها في ال JavaME ؟؟
هههههههههه
اه ما هو الايام دى الواحد بقى ينسى كتير
ربنا يسترها
انا كنت عاوز اقول اللى قاله اخى عصام بس مش كنت عارف اصيغه ازاى
جزاه الله كل خير
لانى شوفت هذه الطريقه فى برامج كثيره
شكرا جزيلا لك أستاذ عصام..
محمد لا أظن أن لها فائده في JME, كنت قد شاهدتها منذ سنوات وكان يستعملونها لكتابه كلمات عربيه في داخل ملفات الكود أظن عندما كانوا يستخدموا WTK.
محمود هناك شيئ مختلف بين نظامي والنظام الذي عندك، بصراحه لا أعلم ما هو ربما اعدادات في مكان ما، لأني لا أشاهد هذا التحذير نهائيا.
تم تعديل هذه المشاركة بواسطة مهدي حجازي في 29 نوفمبر 2010 في 20:50
اقتباسفالأمر بسيطالقيمة للحروف تتكون من 16 خانة في النظام الثنائي وأربع خانات في النظام السادسعشري
محمد استخدام عملية انقل إلى اليمين shift right
لكي يحص لعى كل خانة من الخانات الأربع على حدة
والتي تكون كالتالي
مثلاً العدد c=1100
لوقلنا
c>>2
فالناتج سيساوي 11 أي 3 بالنظام العشري
نلاحظ محمد قام بعملية النقل أول مرة 12 فحصل على الخانة الأولى
ثم قام البنقل على 8 فحصل على الخانتين لكنه في الدالة characterDigit عمل عملية & مع الرقم 0f
فحصل على الخانة الثانية بدون الخانة الأولى
ثم قام بالنقل إلى اليمين 4 خانات فحصل على الثلاث خانات الأواخر
لكنه في الدالة characterDigit عمل عملية & مع الرقم 0f
فحصل على الخانة الثالثة بدون الخانتين الأولى والثانية
ثم أخذ العدد كاملاً لكنه باستخدام الدالة characterDigit عمل عملية & مع الرقم 0f
فحصل على الخانة الرابعة بدون الخانتين الثلاث الأول
هاه؟ ![]()
HeartOutputStream myHeart;
OutputStream myHeartOutStream;
myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);
while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");
استاذ محمد
ممكن أشارك معكم
ما رأيك لو اصبحت الفئة هكذا
package unicode;
/**
* Write a description of class Test2 here.
*
* @author (MErsan)
* @version (1.1)
*/
public class Unicode {
private final static String DIGITS = "0123456789abcdef";
private final static String ESC_U = "\\\\u";
private final static int SHIFT = 4;
private final static int MASK = 15;
private final static int BASE = 16;
public static String encode(String text) {
if (text == null || text.trim().length() <= 0) {
return null;
}
int textLen = text.length();
StringBuilder buffer = new StringBuilder(textLen * 6);
for (int i = 0; i < textLen; i++) {
buffer.append(toUnsignedString(text.charAt(i)));
}
return buffer.toString();
}
private static String toUnsignedString(int num) {
char[] buf = { '\\', 'u', '0', '0', '0', '0' };
int charPos = 6;
do {
buf[--charPos] = DIGITS.charAt(num & MASK);
num >>= SHIFT;
} while (num > 0);// Unsigned
return new String(buf);
}
private static int toSignedString(String num) {
if (!(num.trim().length() > 0)) {
return 0;
}
num = num.toLowerCase();
int length = num.length() - 1;
int sum = 0;
int power = 1;
do {
sum += (DIGITS.indexOf(num.charAt(length--)) * power);
power *= BASE;// base number 16
} while (length > 0);
return sum;
}
public static String decode(String s) {
if (s == null || s.length() <= 0) {
return null;
}
String[] strings = s.split(ESC_U);
StringBuilder result = new StringBuilder(strings.length * 2);
for (String h : strings) {
if (h.trim().length() > 0) {
result.append((char) toSignedString(h));
} else {
result.append(h);
}
}
return result.toString();
}
public static void main(String[] args) {
String str = encode("الفريق العربي");
System.out.println("\n" + str);
System.out.println("\n" + decode(encode("الفريق العربي")));
}
}منتظر اراء الجميع
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
يبدو انى لم اضف جديدا
انا اسف على هذه المشاركة :huh:
ساكتب الشفرة ب c++ واعرضها فى المنتدى هناك لاجد من يستجيب
سلام
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
يا محمد أنت جئت بعدما قضي الأمر لا أكثر ولا أقل
كما أنك لم تتلكم عن ما قمت به
لذا لا تتوقع الكثير
تحياتي
سيد محمد، انا لا احب التبرير
لكن انت رأيت الفترة الحالية من انشغال الجميع دون استثناء من الكبير للصغير في احداث مصر
تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 2 فبراير 2011 في 23:26
ليست هناك اى مشكلة
شكرا على مروركم
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳


