Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 土耳其语字符在HTML上显示不正确_Java_Eclipse_Encoding_Utf 8_Turkish - Fatal编程技术网

Java 土耳其语字符在HTML上显示不正确

Java 土耳其语字符在HTML上显示不正确,java,eclipse,encoding,utf-8,turkish,Java,Eclipse,Encoding,Utf 8,Turkish,我正在尝试使用servlet代码将某些内容打印到HTML网页。 我使用UTF-8编码,但网页上没有充分显示土耳其语字符 我如何定义UTF-8编码: String htmlStart = "<html>\n" + "<head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8

我正在尝试使用servlet代码将某些内容打印到HTML网页。 我使用UTF-8编码,但网页上没有充分显示土耳其语字符

我如何定义UTF-8编码:

  String htmlStart =  "<html>\n" +
                    "<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
 <title>" + title + "</title>
</head>\n" +
                    "<body bgcolor = \"#f0f0f0\">\n" +
                       "<h1 align = \"center\">" + title + "</h1>\n" +
                       "<ul>\n" + "  <li><b>"+url + "</b>" +  "</ul>\n"; 
response.getWriter().append("Served at: ").append(request.getContextPath()); 
字符串htmlStart=“\n”+
"
“+标题+”
\n“+
“\n”+
“”+标题+“\n”+
“
    \n”+“
  • ”+url+“+”
\n”;
如何在html中打印单词:

 for (String token : parsed) {
                med+= "<p>" +  token + "</p>\n"; 
                System.out.println(token);
            }   
for(字符串标记:已解析){
med+=“”+令牌+”

\n”; System.out.println(令牌); }
上面的代码写入Eclipse控制台的内容:

穆奥拉大学

我在生成的HTML中看到的内容:

穆拉斯蒂克?科曼大学


您已经为生成的HTML指定了
“charset=utf-8”
,因此在浏览器中读取/呈现数据应该不是问题(如您所建议的)

但是您的控制台示例代码不正确,因为它没有指定要使用UTF-8。默认行为是在创建数据时使用平台的默认编码,这可能不是您想要的

在示例代码中解决此问题的最简单方法是通过调用
setOut()
System.out
重新分配给使用UTF-8的
PrintStream

但是,如果在Windows命令提示符下运行该代码,会出现以下问题:

Mu?la S?tk? Koçman Üniversitesi (default PrintStream)

Muğla Sıtkı Koçman Üniversitesi (UTF-8 PrintStream)
第一行失败(与您的一样),因为数据是使用默认编码写入和读取的,在我的机器上是Cp437。第二行失败,因为尽管数据被正确写入UTF-8,但仍然使用Cp437呈现

要解决此问题,请在运行代码之前(至少在Windows上),通过在控制台中指定
chcp 65001
,将控制台的代码页显式设置为UTF-8。然后您将看到第二行正确呈现,因为它以UTF-8的形式写入和读取:

Mu?la S?tk? Koman niversitesi (default PrintStream)

Muğla Sıtkı Koçman Üniversitesi (UTF-8 PrintStream)
注:

  • 您不会显示生成的HTML是如何在servlet中创建的,但是如果您确保它是以UTF-8的形式编写的,您应该可以
  • 如果您仍然被卡住,请更新您的问题以显示servlet的完整源代码,如果这个源代码太大
  • 我认为Eclipse在幕后做一些事情以允许输出在其控制台中正确渲染是没有帮助的。我不确定Eclipse团队为什么决定这么做,因为它掩盖了代码中的一个潜在问题

    • 非常感谢您的回复,帮助我解决了这个案件。正如我在修复bug方面遇到的大多数挑战一样,努力创建一个最小的、可复制的示例再次起到了帮助作用。我找到了罪魁祸首,在删除它之后,我的代码按照我的意愿工作,尽管我仍然不知道它是如何影响UTF-8编码的:

        String htmlStart =  "<html>\n" +
                          "<head>
      <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
       <title>" + title + "</title>
      </head>\n" +
                          "<body bgcolor = \"#f0f0f0\">\n" +
                             "<h1 align = \"center\">" + title + "</h1>\n" +
                             "<ul>\n" + "  <li><b>"+url + "</b>" +  "</ul>\n"; 
      
      response.getWriter().append("Served at: ").append(request.getContextPath()); 
      
      您可以在下面看到所有最小的、可复制的servlet代码:

      import java.io.IOException;
      import java.io.OutputStreamWriter;
      import java.io.PrintStream;
      import java.io.PrintWriter;
      
      import javax.print.attribute.standard.Severity;
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
         
      /**
       * Servlet implementation class MyServlet
       */
      @WebServlet("/Minimal")
      public class Minimal extends HttpServlet {
          private static final long serialVersionUID = 1L;
             
          /**
           * @see HttpServlet#HttpServlet()
           */
          public Minimal() {
              super();
              // TODO Auto-generated constructor stub
          }
      
          /**
           * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
           */
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
              // TODO Auto-generated method stub
               
              System.setOut(new PrintStream(System.out, true, "UTF8"));
              
              
              // The culprit code part which effects UTF-8's proper working 
              //response.getWriter().append("Served at: ").append(request.getContextPath());
              
              response.setContentType("text/html; charset=utf-8");
              response.setCharacterEncoding("UTF-8");
              PrintWriter out = response.getWriter();
               
                String title = "GEMED Software Requirements";
                String docType =  "<!doctype html public \"-//w3c//dtd html 4.0 " +
                   "transitional//tr\">\n";
                   
                String url = request.getParameter("site11");  
               
                String htmlStart =  docType + "<html>\n" +
                          "<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <title>" + title + "</title></head>\n" +
                          "<body bgcolor = \"#f0f0f0\">\n" +
                             "<h1 align = \"center\">" + title + "</h1>\n" +
                             "<ul>\n" + "  <li><b>"+url + "</b>" +  "</ul>\n"; 
                
               String med2 = "Türkçe: Muğla Sıtkı Koçman Üniversitesi Rektörü Çalışmayan Öğrencilerden Şikayetçi......" ;
                String htmlEnd =  "</body>" +  "</html>";
          
                out.println( htmlStart + med2 +  htmlEnd); 
          
          }
      
          /**
           * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
           */
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // TODO Auto-generated method stub
              doGet(request, response);
          }
      
      }
      
      import java.io.IOException;
      导入java.io.OutputStreamWriter;
      导入java.io.PrintStream;
      导入java.io.PrintWriter;
      导入javax.print.attribute.standard.Severity;
      导入javax.servlet.ServletException;
      导入javax.servlet.annotation.WebServlet;
      导入javax.servlet.http.HttpServlet;
      导入javax.servlet.http.HttpServletRequest;
      导入javax.servlet.http.HttpServletResponse;
      /**
      *Servlet实现类MyServlet
      */
      @WebServlet(“/Minimal”)
      公共类最小扩展HttpServlet{
      私有静态最终长serialVersionUID=1L;
      /**
      *@参见HttpServlet#HttpServlet()
      */
      公共最低限额(){
      超级();
      //TODO自动生成的构造函数存根
      }
      /**
      *@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
      */
      受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
      //TODO自动生成的方法存根
      系统放样(新打印流(System.out,true,“UTF8”);
      //影响UTF-8正常工作的罪犯代码部分
      //response.getWriter().append(“服务于:”).append(request.getContextPath());
      setContentType(“text/html;charset=utf-8”);
      响应。setCharacterEncoding(“UTF-8”);
      PrintWriter out=response.getWriter();
      字符串title=“GEMED软件需求”;
      字符串docType=“\n”;
      字符串url=request.getParameter(“site11”);
      字符串htmlStart=docType+“\n”+
      “”+标题+“\n”+
      “\n”+
      “”+标题+“\n”+
      “
        \n”+“
      • ”+url+“+”
      \n”; String med2=“Türkçe:Muğla SıtkıKoçmanÜniversitesi Rektörıalı351; mayanğrencilerdenŞikayetçi……”; 字符串htmlEnd=“”+”; out.println(htmlStart+med2+htmlEnd); } /** *@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应) */ 受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{ //TODO自动生成的方法存根 doGet(请求、响应); } }
      您是否尝试在浏览器中阅读它?在我看来,您的控制台似乎不支持Unicode字符。将其写入文件并使用浏览器或编辑器(支持UTF-8)读取。不要信任控制台来显示正确的字符OK,看起来您正在使用Eclipse控制台。我在你的问题中添加了Eclipse标签。我在Firefox、Chrome和Opera等浏览器上进行了尝试,但没有任何改变。我认为问题不在于浏览,我们必须关注如何用Java编码HTML。因为您的问题与用Java指定编码有关,所以我将您的
      HTML
      标记替换为
      ja