জাভাতে "এনকোডিংয়ের জন্য অক্ষম অক্ষর" সতর্কতা


112

আমি বর্তমানে একটি জাভা প্রকল্পে কাজ করছি যা আমি সংকলন করার সময় নিম্নলিখিত সতর্কতা নির্গত করছি:

/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8
    [javac]         String copyright = "� 2003-2008 My Company. All rights reserved.";

আমি নিশ্চিত না যে কীভাবে তারিখের আগে এসও অক্ষরটি রেন্ডার করবে, তবে এটি একটি কপিরাইট প্রতীক হওয়া উচিত এবং হীরার একটি প্রশ্ন চিহ্ন হিসাবে সতর্কবাণীতে প্রদর্শিত হবে।

এটি লক্ষণীয় যে চরিত্রটি আউটপুট আর্টিক্টে সঠিকভাবে উপস্থিত হয়েছে, তবে সতর্কতাগুলি একটি উপদ্রব এবং এই শ্রেণিটিযুক্ত ফাইলটি একদিন কোনও পাঠ্য সম্পাদক দ্বারা স্পর্শ করতে পারে যা এনকোডিংকে ভুলভাবে সংরক্ষণ করে ...

এই অক্ষরটিকে কীভাবে "কপিরাইট" স্ট্রিংয়ে ইনজেক্ট করব যাতে সংকলক খুশি হয় এবং সম্ভাব্য পুনরায় এনকোডিংয়ের সমস্যা ছাড়াই প্রতীকটি ফাইলটিতে সংরক্ষণ করা যায়?


আসলে কী বাইটস সেই কপিরাইট চরিত্রটি তৈরি করে তা জেনে আগ্রহী হোন , অর্থাত hexdump AppDBCore.javaআমি কোনওভাবে সন্দেহ করি \u00a9এবং এর পরিবর্তে এমন একটি জিনিস যা আপনার সিস্টেম সেটআপের কারণে আপনার জন্য আংশিকভাবে কাজ করে। উপরের প্রশ্ন চিহ্নটি একটি আগত চরিত্রের প্রতিস্থাপনের জন্য ব্যবহার করা হয় যার মান অজানা বা অদৃশ্য
জারে

উত্তর:


56

"Xx uxxxx" এস্কেপ ফর্ম্যাটটি ব্যবহার করুন।

উইকিপিডিয়া অনুসারে , কপিরাইটের প্রতীকটি ইউনিকোড ইউ + 00A9 তাই আপনার লাইনটি পড়তে হবে:

String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";

13
\ UNNNN অক্ষরগুলি সম্পর্কে সতর্ক থাকুন ... লাক্ষিক বিশ্লেষণ করার আগে সেগুলি পার্স করা হয়েছে। উদাহরণস্বরূপ, আপনি যদি এই কোডটি / * সি: \ ইউনিট * / আপনার কোডটিতে রাখেন তবে এটি আর সংকলন করবে না, কারণ "নাইট" হেক্স নম্বরটি সঠিক নয়।
পিটার btibraný

3
একেবারে। (এই ভাল সি #, পলায়নপর যেখানে ইউনিকোড শুধুমাত্র নির্দিষ্ট প্রেক্ষিতে প্রয়োগ করা হয় পরিচালিত হয় - কিন্তু তারপর বিপজ্জনক \ এক্স পালাবার পাশাপাশি যা ভয়াবহ ক্রম, আছে।)
জন স্কিট

5
এটি নিরাময়ের চেয়ে ব্যান্ড-এইডের মতো শোনাচ্ছে। আসল সমস্যাটি দেখা যাচ্ছে যে আপনি যখন জাভ্যাকটিকে ইউটিএফ -8 এ উত্স ফাইলগুলি প্রত্যাশা করতে বলছেন যখন তারা সত্যই আইএসও -8859-1 বা উইন্ডোজ-1252 এর মতো একক বাইট এনকোডিংয়ে থাকে।
অ্যালান মুর 1

6
@ অ্যালান এম: আমার অভিজ্ঞতা অনুসারে, আপনার উত্সটি যে কোনও জায়গায় সংকলিত হতে পারে যেখানেই সঠিক এনকোডিংটি ব্যবহার করেছেন তা নিশ্চিত করার চেয়ে ASCII এ উত্স ফাইল রেখে আপনার কোনও সমস্যা হবে না তা নিশ্চিত করা অনেক সহজ ( আইডিইএ ইত্যাদি)।
জন স্কিটি

6
@ জন, এটি জাভার একটি মৌলিক ত্রুটি; জাভা উত্স ইউনিটটি ইউটিএফ -8, আইএসও 8859-1, সিপি 1252, ম্যাক্রোম্যান বা অন্য যে কোনও ক্ষেত্রে এনকোড করা হয়েছে, উত্স ইউনিটের বাহ্যিক মেটাডেটাতে চিকিত্সা করা হয়। এটি আপনাকে আপনার পিঁপড়ের ফাইল বা একটিলিপস কনফিগারেশন ইত্যাদি ঠিক করতে মনে করতে বাধ্য করে As যে ভাষাগুলি মেটাটাটা (এনকোডিং মেটাডেটা) এবং ডেটা (পড়ুন: উত্স কোড) এক জায়গায় রাখে সেগুলি এতে আরও দৃ more় are এটি একমাত্র বুদ্ধিমান পন্থা।
tchrist

91

জাভ্যাক-এনকোডিং আইএসও -8859-1 ফাইল_নাম.জাভা দিয়ে চেষ্টা করুন


1
আমি এই সমাধানটি পছন্দ করি। আমি আমার পিঁপড়া বিল্ড.এক্সএমএল-এর একটি সংকলক হিসাবে "এনকোডিং ইউটিএফ -8" যুক্ত করেছি এবং আমি এখনও "সতর্কতা: এএসসিআইআই এনকোডিংয়ের জন্য অবিচ্ছিন্ন চরিত্র" পেয়েছি। যদি আমি এটিকে "-coding jjjj" হিসাবে সংশোধন করি তবে এটি "ত্রুটি: অসমর্থিত এনকোডিং: jjjj" সংকলন করবে না, তাই আমি জানি এটি ইউটিএফ -8 স্বীকৃতি দিচ্ছে, তবে এটি এখনও জাজা ফাইলকে এসসিআই হিসাবে বিবেচনা করা হবে বলে মনে হচ্ছে। দীর্ঘশ্বাস.
dfrankow

1
আমি পিঁপড়া জাভাক টাস্কের "এনকোডিং" প্যারামিটার চেষ্টা করেছি, একই সমস্যা। এটি প্যারামিটারটি সনাক্ত করে তবে তারপরে এটি কোনওভাবে উপেক্ষা করে।
dfrankow

20
@ ডিফ্র্যাঙ্কো: আপনাকে আপনার ফাইলে <compilerarg line="-encoding utf-8"/>প্রযোজ্য <javac>কলের আওতায় যুক্ত করতে Build.xmlহবে। এটি এটি করার একটি খারাপ উপায়, তবে আপনার কোনও বিকল্প নেই। শীর্ষে আমার দীর্ঘ মন্তব্য দেখুন।
tchrist

আমার একই সমস্যা ছিল যখন আমি পিঁপড়ের স্ক্রিপ্টটিতে এটি সংশোধন করেছিলাম ঠিক আছে, আমি এটি একটি উইন্ডোজ কোমন্ডলাইন থেকে তৈরি করেছিলাম, আশ্চর্যের বিষয় হ'ল যে আমি গ্রহণ থেকে বিল্ডিন ​​ছিলাম এটি সংলগ্ন হ'ল স্বর্গের সাথে যুদ্ধ করেছিল, মনে হচ্ছে গ্রহটি থেক কেয়ারকে দেখায় এনকোডিং ডান।
সাইমনসি

এটি আমাকে সহায়তা করেছিল :) ম্যাক ওএসএক্সের জন্য
অরুণ আব্রাহাম

44

আপনি যদি মাভেন ব্যবহার করছেন <encoding>তবে সংকলক প্লাগইনটির কনফিগারেশনে সুস্পষ্টভাবে সেট করুন , যেমন

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

লোকেরা যদি তাদের প্রকল্প তৈরির জন্য মাভেন ব্যবহার করে, ভাগ করে নেওয়ার জন্য ধন্যবাদ এটি সঠিক পন্থা।
শমিক

2
জাভাডোক প্লাগইন অপরিবর্তনীয় চরিত্র সম্পর্কে অভিযোগ করবে। project.build.sourceEncodingসম্পত্তি নির্ধারণ করা ভাল ।
ইমানুয়েল

আমি ইতিমধ্যে প্রজেক্ট.বিল্ড.সোর্স এনকোডিং সম্পত্তি ব্যবহার করছিলাম তবে কোনওভাবে এটি সংকলক এনকোডিং সম্পত্তিটিতে সঠিকভাবে মানচিত্র তৈরি করে নি। এটি নির্ধারণ করে কৌতুকটি স্পষ্টভাবে করেছিলেন
ফেডেরিকো বোনেলি

32

এটি আমার পক্ষে সহায়তা করেছে:

আপনাকে যা করতে হবে তা হ'ল JAVA_TOOL_OPTIONS নামে একটি পরিবেশগত পরিবর্তনশীল নির্দিষ্ট করা। আপনি যদি এই পরিবর্তনশীল -Dfile.encoding = UTF8 এ সেট করেন, প্রতিবার একটি JVM শুরু হয়, এটি এই তথ্যটি গ্রহণ করবে।

সূত্র: http://phaiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character- for- encoding- cp1252- once- and- for- all /


বাহ এটি কাজ করে আমি এটি কেবল আমার .bashrc এ যুক্ত করি এবং এটি আমার সমস্যার সমাধান করে।
কাউবুয়-পেং 31'18

দুর্দান্ত কাজ করেছি, কমান্ড লাইন থেকে আমি তৈরিতে প্রবেশ করেছি: javac MyJavaFile.java -encoding utf-8 -cp .;lib\*তারপরে যখন এটি চালানো হয় তখন আমাকে অতিরিক্ত অতিরিক্ত এনকোডিং অংশ যুক্ত করার দরকার ছিল না।
আজুরস্পট

23

এই লাইনটি আপনার ফাইলের মধ্যে রেখে দিন। জাভা কনফারেন্সের উপরে গ্রেডল।

apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}   

আপনার জন্য এনকোডিং সেট করতে চান পারে compileTestJavaএবং জন্য javadocপাশাপাশি
ফ্রাঙ্ক Neblung

8

ইউনিকোড (UTF-8 এনকোডযুক্ত) ফাইল সংকলন করার সময় এই সংকলন ত্রুটিটি বেশিরভাগ সময় আসে

javac -encoding UTF-8 HelloWorld.java

এবং আপনি এই সংকলন বিকল্পটি আপনার আইডিইতে যুক্ত করতে পারেন যেমন: ইন্টেলিজ ধারণা
(ফাইল> সেটিংস> জাভা সংকলক ) অতিরিক্ত কমান্ড লাইন প্যারামিটার হিসাবে যুক্ত করুন

এখানে চিত্র বর্ণনা লিখুন

- এনকোডিং : এনকোডিং উত্স ফাইল এনকোডিংয়ের নাম নির্ধারণ করুন যেমন EUC-JP এবং UTF-8 .. যদি এনকোডিং নির্দিষ্ট না করা থাকে তবে প্ল্যাটফর্মের ডিফল্ট রূপান্তরকারী ব্যবহার করা হয়। ( ডিওসি )


8

গ্রেডল পদক্ষেপ

আপনি যদি গ্র্যাডল ব্যবহার করছেন তবে জাভা প্লাগইন প্রয়োগ করে এমন লাইনটি আপনি খুঁজে পেতে পারেন:

apply plugin: 'java'

তারপরে সংকলন টাস্কটি ইউটিএফ -8 হওয়ার জন্য এনকোডিংটি সেট করুন:

compileJava {options.encoding = "UTF-8"}   

যদি আপনার ইউনিট পরীক্ষা থাকে তবে আপনি সম্ভবত ইউটিএফ -8 সহ এটিও সংকলন করতে চান:

compileTestJava {options.encoding = "UTF-8"}

সামগ্রিক গ্রেডল উদাহরণ

এর অর্থ সামগ্রিক গ্রেড কোডটি এরকম কিছু দেখবে:

apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}

2

এটি আমার পক্ষে কাজ করেছে -

    <?xml version="1.0" encoding="utf-8" ?>
<project name="test" default="compile">
    <target name="compile">
        <javac srcdir="src" destdir="classes" 
                           encoding="iso-8859-1" debug="true" />
    </target>
</project>

1

আপনি যদি গ্রহপ ব্যবহার করেন (Eclipse আপনার জন্য utf8 কোড রাখতে পারে এমনকি আপনি utf8 অক্ষরও লিখতে পারেন programming আপনি যখন প্রোগ্রামিং করবেন তবে ব্যাকগ্রাউন্ডটি utf8 কোড হবে) আপনি স্বাভাবিক utf8 অক্ষরটি দেখতে পাবেন);

  1. নির্বাচন করা প্রকল্প
  2. রাইট ক্লিক করুন এবং নির্বাচন করুন বৈশিষ্ট্য
  3. নির্বাচন রিসোর্স উপর রিসোর্স প্যানেল (ডান মেনুর শীর্ষ যা 2. পর খোলা)
  4. আপনি রিসোর্স প্যানেল , টেক্সট ফাইল এনকোডিং এ দেখতে পারেন , যা আপনি চান তা চয়ন করুন

পিএস: আপনি কোডে স্থিত মান হলে এটি ঠিক হবে। উদাহরণস্বরূপ স্ট্রিং পরীক্ষার জন্য = "İİİİİııııııççççç";


1
আপনার প্রোগ্রামটি "আপনি [প্রোগ্রামিং] করার সময় স্বাভাবিক [এ] ইউটিএফ ৮ চরিত্রটি দেখতে পাবেন তবে [পৃষ্ঠাগুলিটি ইউটিএফ ৮ কোড হবে" এর কোনও অর্থ নেই sense এছাড়াও, উপরের প্রশ্নের জবাবে আমার দীর্ঘ মন্তব্য দেখুন।
tchrist

আমি এটিকে আইএসও -8859-1 এ পরিবর্তন করেছি, তবে "ইউটিএফ 8 এনকোডিংয়ের জন্য অবিস্মরণীয় চরিত্র" সম্পর্কে একটি সংকলন ত্রুটি পেয়েছি।
প্যাকওভারফ্লো

1

আমার একই সমস্যা ছিল, যেখানে জাভা ত্রুটি বার্তায় বর্ণিত অক্ষর সূচকটি ভুল ছিল। আমি হেক্স ০২২-এর পরিবর্তে হেক্স ০৯৪ (কোটের পরিবর্তে বাতিল, তবে একটি উদ্ধৃতি হিসাবে উপস্থাপিত) হওয়ার আগে ডাবল উদ্ধৃতি চরিত্রগুলিতে এটি সংকুচিত করেছিলাম soon হেক্স 022 বৈকল্পিকের জন্য অদলবদল করার সাথে সাথে সমস্ত ঠিক হয়ে গেল।


1

যদি কেউ কমান্ড প্রম্পট থেকে মাভেন বিল্ড ব্যবহার করে থাকে তবে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

                    mvn -Dproject.build.sourceEncoding=UTF-8

1

এটি কিছু সিস্টেমে কেন ঘটে এবং অন্যদের ক্ষেত্রে নয় কেন তা ভাবছেন (একই উত্স সহ, প্যারামিটারগুলি তৈরি করুন এবং এই জাতীয়), আপনার LANGপরিবেশের পরিবর্তনশীল পরীক্ষা করুন । আমি যখন সতর্কতা / ত্রুটি পাই LANG=C.UTF-8তবে কখন নয় LANG=en_US.UTF-8

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.