PDA

View Full Version : فارسی نویسی در سرولت



mansoor_csharp
سه شنبه 29 بهمن 1387, 01:30 صبح
من یک سرولت خیلی ساده نوشتم که فقط یک جمله فارسی بنویسد ولی به صورت ؟؟؟؟؟؟ نمایش می دهد من از آپاچی استفاده می کنم و هرچی کارارکتر ست سراغ داشتم utf-8 کردم ولی درست نشد لطفاً کمک کنید....در ضمن از اکلیپس استفاده می کنم
package test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class TestServlet
*/
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out=response.getWriter();
request.setCharacterEncoding("UTF-8");
out.print("<html>");
out.print("<head>");
out.print("<title>");
out.print("اولین سرولت من");
out.print("</title>");
out.print("</head>");
out.print("<body>");
out.print("اولین سرولت !");
out.print("</body>");
out.print("</html>");
}

}

mazdadoost
سه شنبه 29 بهمن 1387, 08:07 صبح
این متا تگ رو هم باید به مرورگر خروجی بدین:

<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
موفق باشید.

mansoor_csharp
سه شنبه 29 بهمن 1387, 14:33 عصر
من متد را به شکل زیر تغییر دادم ولی باز هم به جای حروف فارسی علامت سوال می زند.کسی راه حلی سراغ دارد؟
PrintWriter out=response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//String a1="1.0";
out.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
out.print("<!DOCTYPE html PUBLIC\"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n");
out.print("<html xmlns=\"http://www.w3.org/1999/xhtml\">\n");
out.print("<head>\n");
out.write("<meta http-equiv=\"Content-Type\"");
out.write(" ");
out.write(" content=\"text/html;charset=UTF-8\">\n");
//out.print("<meta http-equiv="+"Content-Type"+"content="+"text/html; charset=UTF-8"+"/>");
out.print("<title>\n");
out.print("اولین سرولت من\n");
out.print("</title>\n");
out.print("</head>\n");
out.print("<body>\n");
out.print("اولین سرولت !\n");
out.print("</body>\n");
out.print("</html>\n");

cups_of_java
سه شنبه 29 بهمن 1387, 20:56 عصر
مطمئن هستی که eclipse داره فایل سورس کد سرولت ات رو unicode ذخیره می کنه؟

mansoor_csharp
چهارشنبه 30 بهمن 1387, 07:56 صبح
فکر می کنم آره من در preferences کدپیج را utf-8 گذاشتم در ضمن وقتی از یک صفحه jsp , از دستور request.getParametere استفاده می کنم پارامتر فارسی درست پاس می شود که این نشان می دهد که تنظیمات اکلیپس احتمالاً درست ست شده است
لطفاً اگر چیزی به ذهنتون می رسه راهنمایی کنید
باتشکر

mansoor_csharp
پنج شنبه 01 اسفند 1387, 23:29 عصر
من این سرولت را دیباگ کردم و در streamEncoder دیدم متغیر cs=ISO_8859_1 است که نمی دانم این مقدار را از کجا می آورد امیدوارم کسی باشه که بتونه کمک کنه عکس آن را هم اینجا گذاشتم

mazdadoost
جمعه 02 اسفند 1387, 00:52 صبح
من این سرولت را دیباگ کردم و در streamEncoder دیدم متغیر cs=ISO_8859_1 است که نمی دانم این مقدار را از کجا می آورد امیدوارم کسی باشه که بتونه کمک کنه عکس آن را هم اینجا گذاشتم
دوست عزیز :
نمیشه قضاوتی کرد . اگر برات ممکنه appserver تو عوض کن و ببین چی میشه/

mansoor_csharp
جمعه 02 اسفند 1387, 12:04 عصر
با تشکر از شما
یعنی از سروری غیر از آپاچی استفاده کنم؟ یا از یک ورژن دیگه آپاچی استفاده کنم؟؟

mazdadoost
جمعه 02 اسفند 1387, 13:25 عصر
با تشکر از شما
یعنی از سروری غیر از آپاچی استفاده کنم؟ یا از یک ورژن دیگه آپاچی استفاده کنم؟؟

دوسته عزیز :
منظورتون Tomcat هست؟آره.سعی کنید با jetty یا glassfish هم یه امتحانی کنید.
اگر مشکل حل شد از کانفیگه tomcat هست به احتمال زیاد.
موفق باشید.

unhandled_event
جمعه 02 اسفند 1387, 14:54 عصر
سلام

با وجود دستورهای:


request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8")

از resource bundle و locale هم میتونید استفاده کنید
اون هم مشکل ایجاد میکنه ؟
تنها مشکلش این بود که گاهی باید دستی در classes در WEB-INF کپی بشه
معمولا بهتره جملات فارسی در editor هایی مثل eclipse مستقیما نوشته نشن چون بر حسب تنظیمات ادیتور و ..
ممکنه با دیدن کاراکترهای خارج از محدوده ANSI هوش بخرج بده و فایل سورس شما رو عجیب و غریب ذخیره کنه ( در بهترین حالت unicode ) و سرور آپاچی tomcat
اون سرولت رو موقع کامپایل یا اجرا طور دیگه ای تفسیر کنه.
امکان resource bundle کمک میکنه از اول بصورت اصولی فارسی یا حتی چند زبانه کار کنید.
اگر با دات نت کار کرده باشید فایلهای resource bundle چیزی شبیه به فایلهای resx در دات نت هستن.

mansoor_csharp
جمعه 02 اسفند 1387, 18:55 عصر
ممنون از راهنماییتون درست می گید فکر می کنم استفاده از resource bundle کار درست تر و پایه ای تری باشه

Omid4Omid
سه شنبه 23 مهر 1392, 14:09 عصر
<%@ page language="java" contentType="text/html; charset=UTF-16"
pageEncoding="UTF-16"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16">

شسثئخده
دوشنبه 29 مهر 1392, 13:41 عصر
با سلام و احترام

شما باید Encodings ادیتور خودتون رو C/C++‎‎/Java source code تنظیم کنید .
به این لینک سر بزنید:
http://www.fileformat.info/info/unicode/char/6cc/index.htm

Encode مناسب جاوا برای فارسی مثلا محمد به این شکل \u0645\u062D\u0645\u062F در میاد. (همین نوشته رو تو کدتون امتحان کنید)

ضمن اینکه شما باید تامکت رو برای UTF-8 تنظیم کنید، برای اینکار توی پوشه conf تامکت server.xml رو باز کنید و تگ connector رو اینطوری

<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
تنظیم کنید.