සමහර යුනිකෝඩ් අක්ෂර සමඟ අදහස් දැක්වීමේදී ජාවා කේතය ක්‍රියාත්මක කිරීමට අවසර දෙන්නේ ඇයි?


1363

පහත කේතය මඟින් "හෙලෝ වර්ල්ඩ්!" (නැත, එය උත්සාහ කරන්න).

public static void main(String... args) {

   // The comment below is not a typo.
   // \u000d System.out.println("Hello World!");
}

මෙයට හේතුව ජාවා සම්පාදකයා යුනිකෝඩ් අක්‍ෂරය \u000dනව රේඛාවක් ලෙස විග්‍රහ කර පරිවර්තනය කිරීම ය:

public static void main(String... args) {

   // The comment below is not a typo.
   //
   System.out.println("Hello World!");
}

මේ අනුව අදහස් දැක්වීමක් "ක්‍රියාත්මක කරනු ලැබේ".

අනිෂ්ට කේත "සැඟවීමට" මෙය භාවිතා කළ හැකි බැවින් හෝ නපුරු ක්‍රමලේඛකයෙකුට පිළිසිඳ ගත හැකි ඕනෑම දෙයක්, අදහස් දැක්වීමේදී එයට අවසර දෙන්නේ ඇයි ?

ජාවා පිරිවිතරයෙන් මෙය අවසර දෙන්නේ ඇයි?


44
"මෙය අවසර දී ඇත්තේ ඇයි" මට මතය මත පදනම් වූවක් ලෙස පෙනේ. භාෂා නිර්මාණකරුවන් තීරණයක් ගත්තා, දැනගත යුතු තවත් මොනවාද? එම තීරණය ගන්නා පුද්ගලයාගේ ප්‍රකාශයක් ඔබ සොයා නොගන්නේ නම්, අපට අනුමාන කළ හැක්කේ එය පමණි.
ඉන්ගෝ බර්ක්

195
එක් සිත්ගන්නා කරුණක් නම් අවම වශයෙන් OP හි IDE එය වැරදියට
වැටී

14
සම්බන්ධ විය හැක: stackoverflow.com/questions/4448180/…
dhke

47
@Tobb නමුත් ජාවා නිර්මාණකරුවන් SO පැමිණෙන එය එසේ විය හැකි පිළිතුරු ඔවුන්ගෙන් එක් කෙනෙක් විසින් ලබා ගැනීමට. මෙම ප්‍රශ්නයට දැනටමත් පිළිතුරු සපයන සම්පත් ද ඔවුන් සතුව තිබිය හැකිය.
Pshemo

41
සරලම පිළිතුර නම් කේතය භාෂාවේ නීතිරීති අනුව කිසිසේත්ම අදහස් දැක්වීමක නොමැති වීමයි, එබැවින් ප්‍රශ්නය වැරදි ලෙස සකස් වී ඇත.
ලෝර්න් හි මාක්විස්

Answers:


743

වෙනත් ඕනෑම ශබ්දකෝෂ පරිවර්තනයකට පෙර යුනිකෝඩ් විකේතනය සිදු වේ. මෙහි ඇති ප්‍රධාන වාසිය නම්, එය ASCII සහ වෙනත් ඕනෑම කේතන ක්‍රමයක් අතර ඉදිරියට හා පසුපසට යාම සුළුපටු දෙයක් බවට පත් කිරීමයි. අදහස් දැක්වීම ආරම්භ වන්නේ කොතැනින්දැයි ඔබට සොයා ගැනීමට පවා අවශ්‍ය නැත!

ජේඑල්එස් 3.3 වගන්තියේ දක්වා ඇති පරිදි, ඕනෑම ASCII මත පදනම් වූ මෙවලමකට ප්‍රභව ගොනු සැකසීමට මෙය ඉඩ දෙයි:

[...] ජාවා ක්‍රමලේඛන භාෂාව යුනිකෝඩ් හි ලියා ඇති වැඩසටහනක් ASCII බවට පරිවර්තනය කිරීමේ සම්මත ක්‍රමයක් නියම කරයි, එය ASCII මත පදනම් වූ මෙවලම් මඟින් සැකසිය හැකි ආකාරයකට වැඩසටහනක් වෙනස් කරයි. [...]

මෙය සැමවිටම ජාවා වේදිකාවේ ප්‍රධාන ඉලක්කයක් වී ඇති වේදිකා ස්වාධීනත්වයට (සහාය දක්වන චරිත කට්ටලවල ස්වාධීනත්වය) මූලික සහතිකයක් ලබා දෙයි.

ගොනුවේ ඕනෑම තැනක ඕනෑම යුනිකෝඩ් අක්ෂරයක් ලිවීමට හැකිවීම ඉතා ලක්ෂණයකි, සහ ලතින් නොවන භාෂාවලින් කේත ලේඛනගත කිරීමේදී අදහස් දැක්වීමේදී විශේෂයෙන් වැදගත් වේ. එවැනි සියුම් ආකාරවලින් අර්ථ නිරූපණයට බාධා කළ හැකි වීම (අවාසනාවන්ත) අතුරු ආබාධයකි.

මෙම තේමාව පිළිබඳ ගොචා බොහෝමයක් ඇති අතර ජෝෂුවා බ්ලොච් සහ නීල් ගැෆ්ටර්ගේ ජාවා ප්‍රහේලිකා පහත දැක්වෙන ප්‍රභේදය ඇතුළත් කර ඇත:

මෙය නීතිමය ජාවා වැඩසටහනක්ද? එසේ නම්, එය මුද්‍රණය කරන්නේ කුමක් ද?

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d

(මෙම වැඩසටහන සරල "හෙලෝ වර්ල්ඩ්" වැඩසටහනක් බවට පත්වේ.)

ප්‍රහේලිකාවට විසඳුමේදී ඔවුන් පහත සඳහන් කරුණු පෙන්වා දෙයි:

වඩාත් බැරෑරුම් ලෙස, මෙම ප්‍රහේලිකාව පෙර තුන්දෙනාගේ පාඩම් ශක්තිමත් කිරීමට උපකාරී වේ: ඔබේ වැඩසටහනට වෙනත් ආකාරයකින් නිරූපණය කළ නොහැකි අක්ෂර ඇතුළත් කිරීමට අවශ්‍ය වූ විට යුනිකෝඩ් ගැලවීම අත්‍යවශ්‍ය වේ. අනෙක් සියලුම අවස්ථාවන්හිදී ඒවා වළක්වා ගන්න.


මූලාශ්‍රය: ජාවා: අදහස් දැක්වීමේදී කේතය ක්‍රියාත්මක කිරීම?!


84
කෙටියෙන් කිවහොත්, ජාවා හිතාමතාම එයට ඉඩ දෙයි: "දෝෂය" OP හි IDE තුළ තිබේද?
බත්ෂෙබා

60
Ath බැත්ෂෙබා: එය මිනිසුන්ගේ හිසට වැඩිය. ජාවා විග්‍රහ කිරීම ක්‍රියා කරන ආකාරය තේරුම් ගැනීමට මිනිසුන් උත්සාහ නොකරයි, එබැවින් IDEs සමහර විට කේතය වැරදි ආකාරයකින් පෙන්වයි. ඉහත උදාහරණයේ දී, අදහස් දැක්වීම අවසන් විය යුතු \u000dඅතර ඊට පසුව කොටස කේත උද්දීපනයන් තිබිය යුතුය.
ආරොන් ඩිගුල්ලා

62
තවත් පොදු වැරැද්දක් නම් වලංගු යුනිකෝඩ් ගැලවීමේ අනුක්‍රමයක් නොවන // C:\user\...බැවින් සම්පාදක දෝෂයකට තුඩු දෙන වින්ඩෝස් මාර්ග කේතයට ඇලවීමයි \user.
ආරොන් ඩිගුල්ලා

50
සූර්යග්‍රහණයේ දී කේතය \u000dඅර්ධ වශයෙන් උද්දීපනය වේ. Ctrl + Shift + F එබීමෙන් පසු අක්ෂරය නව රේඛාවකින් ප්‍රතිස්ථාපනය වන අතර ඉතිරි පේළිය ඔතා ඇත
bluelDe

20
LTheLostMind මම පිළිතුර නිවැරදිව තේරුම් ගන්නේ නම් ඔබට මෙය බ්ලොක් අදහස් දැක්වීම් සමඟ ප්‍රතිනිෂ්පාදනය කළ හැකිය. \u002A/අදහස් දැක්වීම අවසන් කළ යුතුය.
තායිමර්

141

මෙය තවම ආමන්ත්‍රණය කර නොමැති හෙයින්, වෙනත් මූලාශ්‍ර කේත සැකසීමට පෙර යුනිකෝඩ් ගැලවී යාමේ පරිවර්තනය සිදුවන්නේ ඇයිද යන්න මෙහි පැහැදිලි කිරීමක් වේ:

එහි පිටුපස ඇති අදහස වූයේ විවිධ චරිත කේතයන් අතර ජාවා ප්‍රභව කේතය අලාභ රහිතව පරිවර්තනය කිරීමට ඉඩ දීමයි. අද, පුළුල් ලෙස යුනිකෝඩ් සහය ඇත, මෙය ගැටලුවක් ලෙස නොපෙනේ, නමුත් ඒ වන විට බටහිර රටක සංවර්ධකයෙකුට ආසියානු අක්ෂර අඩංගු ඔහුගේ ආසියානු සගයාගෙන් යම් ප්‍රභව කේතයක් ලබා ගැනීම පහසු නොවීය, සමහර වෙනස්කම් කරන්න ( එය සම්පාදනය කිරීම සහ පරීක්ෂා කිරීම ඇතුළුව) සහ සියල්ලටම යම් හානියක් නොකර ප්‍රති result ලය ආපසු යැවීම.

එබැවින්, ජාවා ප්‍රභව කේතය ඕනෑම කේතන ක්‍රමයකින් ලිවිය හැකි අතර හඳුනාගැනීම්, චරිත සහ Stringවචනාර්ථ සහ අදහස් තුළ පුළුල් පරාසයක අක්ෂර වලට ඉඩ ලබා දේ . පසුව, එය අලාභ රහිතව මාරු කිරීම සඳහා, ඉලක්ක කේතන ක්‍රමයට සහය නොදක්වන සියලුම අක්ෂර ඒවායේ යුනිකෝඩ් ගැලවී යාමෙන් ප්‍රතිස්ථාපනය වේ.

මෙය ආපසු හැරවිය හැකි ක්‍රියාවලියක් වන අතර සිත්ගන්නා කරුණ නම් පරිවර්තන රීතිය එය මත රඳා නොපවතින බැවින් ජාවා ප්‍රභව කේත වාක්‍ය ඛණ්ඩය ගැන කිසිවක් දැන ගැනීමට අවශ්‍ය නොවන මෙවලමක් මඟින් පරිවර්තනය කළ හැකි වීමයි. මෙය සම්පාදකයා තුළ ඇති ඔවුන්ගේ සැබෑ යුනිකෝඩ් අක්ෂර වලට පරිවර්තනය කිරීම ජාවා ප්‍රභව කේත වාක්‍ය ඛණ්ඩයට ස්වාධීනව සිදු වේ. ප්‍රභව කේතයේ අර්ථය කිසි විටෙකත් වෙනස් නොකර ඔබට දෙපැත්තටම අත්තනෝමතික පරිවර්තන පියවර ගණනාවක් කළ හැකි බව එයින් ගම්‍ය වේ.

තවත් අමුතු අංගයක් සඳහා පවා මෙය සඳහන් කර නැත: \uuuuuuxxxxවාක්‍ය ඛණ්ඩය:

පරිවර්තනය මෙවලමක් චරිත මිදීමේ හා දැනටමත් පලා අනුක්රමය බව අනුක්රමයක් එකා මෙන් විට, එය අතිරේක ඇතුල් කළ යුතු uද අනුපිළිවෙලක් බවට පරිවර්තනය කල \ucafeකිරීමට \uucafe. අර්ථය වෙනස් නොවේ, නමුත් අනෙක් දිශාවට පරිවර්තනය වන විට, මෙවලම එකක් ඉවත් කර ඒවායේ යුනිකෝඩ් අක්ෂර මගින් uතනි එකක් අඩංගු අනුක්‍රම පමණක් ආදේශ කළ යුතුය u. ඒ ආකාරයෙන්, යුනිකෝඩ් පලායාම පවා පෙර සහ පසුපසට හරවන විට ඒවායේ මුල් ස්වරූපයෙන් රඳවා තබා ගනී. මම හිතන්නේ, කිසිවෙකු එම අංගය භාවිතා කර නැත…


1
සිත්ගන්නා native2ascii\uu...xxxx
කරුණ නම්

5
ඔව්, native2asciiලතින් -1 Properties.loadකියවීමට පමණක් නියම කර ඇති පරිදි සම්පත් මිටි අයිසෝ-ලතින් -1 බවට පරිවර්තනය කිරීමෙන් ඒවා සකස් කිරීමට උපකාරී වේ. එහිදී, නීති වෙනස් වේ, \uuu…සින්ටැක්ස් සහ මුල් සැකසුම් අවධියක් නොමැත. දේපල ලිපිගොනු property=multi\u000alineවල ඇත්ත වශයෙන්ම සමාන වේ property=multi\nline. (ප්‍රලේඛනයේ ජාවා ™ භාෂා පිරිවිතරයේ 3.3 වගන්තියේ අර්ථ දක්වා ඇති පරිදි “යුනිකෝඩ් පලායාම භාවිතා කිරීම” යන වාක්‍ය ඛණ්ඩයට
පටහැනිව

10
ඉන්නන් කිසිවක් නොමැතිව මෙම සැලසුම් ඉලක්කය සපුරා ගත හැකි බව සලකන්න; පහසුම ක්‍රමය වනුයේ \uU + 0000–007F පරාසය තුළ අක්ෂර ජනනය කිරීම සඳහා පැන යාම තහනම් කිරීමයි. (එවැනි සියලුම චරිත සමහරවිට පාලනය චරිත කිහිපයක් හැර, 1990-ම අදාළ බව සියලු ජාතික ගැනීමේදී කේතන ක්රමවල විසින් natively නියෝජනය කළ හැක, නමුත් ඔබට කෙසේ හෝ ජාවා ලිවීමට එම අවශ්ය නැත.)
zwol

3
wzwol: හොඳයි, ඔබ කෙසේ හෝ ජාවා ප්‍රභව කේතය තුළ ඉඩ නොදෙන පාලන අක්ෂර බැහැර කරන්නේ නම්, ඔබ හරි. එසේ වුවද, එයින් අදහස් කරන්නේ නීති වඩාත් සංකීර්ණ කිරීමයි. අද, තීරණය ගැන සාකච්ඡා කිරීමට ප්‍රමාද වැඩියි…
හොල්ගර්

uth8 හි ලේඛනයක් සුරැකීමේ ගැටලුව සහ ලතින් හෝ වෙනත් දෙයක් නොවේ. මෙම බටහිර විකාරය නිසා මගේ සියලු දත්ත සමුදායන් ද බිඳී ගියේය
ඩේවිඩ් 天宇 වොන්

106

මම සම්පූර්ණයෙන්ම අකාර්යක්ෂම ලෙස කාරණය එකතු කිරීමට යන්නේ, මට මට උදව් කළ නොහැකි නිසාත්, එය තවම සාදා නැති නිසාත්, ප්‍රශ්නය අවලංගු වන අතර, එය සැඟවුණු පරිශ්‍රයක් වැරදියි, එනම් කේතය පවතින බව අදහස් දැක්වීමක්!

ජාවා ප්‍රභව කේතයෙහි 000 u000d සෑම ආකාරයකින්ම ASCII CR අක්ෂරයකට සමාන වේ. එය කොතැනක සිටියත් සරල හා සරල රේඛාවක්. ප්‍රශ්නයේ හැඩතල ගැන්වීම නොමඟ යවන සුළුය, එම අක්ෂර අනුක්‍රමය සැබවින්ම කෘතිමව අනුරූප වන්නේ:

public static void main(String... args) {
   // The comment below is no typo. 
   // 
 System.out.println("Hello World!");
}

එබැවින් IMHO වඩාත්ම නිවැරදි පිළිතුර නම්: කේතය ක්‍රියාත්මක වන්නේ එය විවරණයක නොමැති නිසා ය; එය ඊළඟ පේළියේ ය. ඔබ බලාපොරොත්තු වන ආකාරයටම "අදහස් දැක්වීමේදී කේතය ක්‍රියාත්මක කිරීම" ජාවා හි අවසර නැත.

බොහෝ ව්‍යාකූලත්වයට හේතු වී ඇත්තේ සින්ටැක්ස් ඉස්මතු කිරීම් සහ IDEs මෙම තත්වය සැලකිල්ලට ගැනීමට තරම් නවීන නොවන බැවිනි. ඔවුන් එක්කෝ යුනිකෝඩ් ගැලවීම කිසිසේත් ක්‍රියාවට නංවන්නේ නැත, නැතහොත් පෙර මෙන් නොව කේතය විග්‍රහ කිරීමෙන් පසුව ඔවුන් එය javacකරයි.


6
මම එකඟ වෙමි, මෙය ජාවා "සැලසුම් දෝෂයක්" නොවේ, නමුත් එය IDE දෝෂයකි.
bvdb

3
ප්‍රශ්නය වන්නේ භාෂාවේ මෙම විශේෂිත අංගය නොදන්නා සහ සමහර විට සින්ටැක්ස් ඉස්මතු කිරීම ගැන සඳහන් නොකර කෙනෙකුට අදහස් දැක්වීමක් ලෙස පෙනෙන කේතය ඇත්ත වශයෙන්ම අදහස් දැක්වීමක් නොවන්නේ මන්ද යන්නයි. ප්‍රශ්නය අවලංගු යැයි කියන පරිශ්‍රයේ පදනම මත විරෝධය දැක්වීම අපැහැදිලි ය.
ෆිල්

H ෆිල්: එය විශේෂිත මෙවලම් සමඟ බැලූ විට අදහස් දැක්වීමක් ලෙස පෙනේ, අනෙක් අය එය වෙනත් ආකාරයකින් පෙන්වයි.
jmoreno

1
@jmoreno එකක් නොකළ යුතුය ඇති කේතය කියවිය පාඨ සකසනයක් වඩා දෙයක් කිරීමට. අවම වශයෙන්, එය අවම පුදුමයේ මූලිකත්වය උල්ලං lates නය කරයි, එනම් // විලාසිතාවේ අදහස් ඊළඟ character n අක්‍ෂරය තෙක් පවතිනවා - අවසානයේදී sequ n මගින් ප්‍රතිස්ථාපනය වන වෙනත් අනුක්‍රමයකට නොවේ. අදහස් කිසි විටෙකත් උදුරා ගැනීම හැර වෙන කිසිවක් බලාපොරොත්තු නොවේ. නරක පෙර සැකසුම්කරු.
ෆිල්

69

මෙම \u000dපලා නිසා අදහස් කොමාව \uගැළවෙන එකසේ අදාල යුනිකෝඩ් අක්ෂර වෙත හරවන පෙර වැඩසටහන tokenized වේ. ඔබ හා සමානව භාවිතා කළ හැකි \u0057\u0057වෙනුවට //කිරීමට ආරම්භ අදහසක්.

මෙය ඔබගේ IDE හි ඇති දෝෂයකි, එමඟින් \u000dඅදහස් දැක්වීම අවසන් වන බව පැහැදිලි කිරීම සඳහා රේඛාව සින්ටැක්ස්-ඉස්මතු කළ යුතුය .

මෙය භාෂාවේ නිර්මාණ දෝෂයකි. එය දැන් නිවැරදි කළ නොහැක, මන්ද එය මත රඳා පවතින වැඩසටහන් බිඳ දමනු ඇත. \uපැන යාම එක්කෝ සම්පාදකයා විසින් අනුරූප යුනිකෝඩ් අක්ෂරයට පරිවර්තනය කළ යුත්තේ එම “අර්ථවත්” සන්දර්භය තුළ පමණි (වචන වචනාර්ථය සහ හඳුනාගැනීම්, සහ වෙනත් තැනක නැත) හෝ U + 0000–007F පරාසය තුළ අක්ෂර ජනනය කිරීම තහනම් කළ යුතුව තිබුණි. , හෝ දෙකම. \u000dපලායාම \uප්‍රයෝජනවත් වන අවස්ථාවන්ට මැදිහත් නොවී, එම අර්ථ නිරූපණයන්ගෙන් එකක් හෝ අදහස් දැක්වීම පලායාම වලක්වනු ඇත - ලතින් නොවන අක්ෂර වින්‍යාසයක අදහස් සංකේතනය කිරීමේ ක්‍රමයක් ලෙස අදහස් ඇතුළත පැන යාම භාවිතා කිරීම ඊට ඇතුළත් බව සලකන්න \u. පෙළ සංස්කාරකයට කොහේද යන්න පිළිබඳ පුළුල් දැක්මක් ලබා ගත හැකිය\uසම්පාදකයාට වඩා ගැලවීම වැදගත් ය. ( ඕනෑම සන්දර්භයකදී \uඅනුරූප චරිත ලෙස පලායාම පෙන්වන කිසිදු සංස්කාරකයක් හෝ IDE ගැන මම නොදනිමි .)

සී පවුල තුළ සමාන සැලසුම් දෝෂයක් තිබේ, 1 අදහස් දැක්වීමේ සීමාවන් තීරණය කිරීමට පෙර බැක්ස්ලෑෂ්-නිව්ලයින් සකසනු ලැබේ, එබැවින් උදා.

// this is a comment \
   this is still in the comment!

මම මෙය ගෙන එන්නේ මෙම විශේෂිත සැලසුම් දෝෂය සෑදීම පහසු වන අතර එය නිවැරදි කිරීමට ප්‍රමාද වන තුරු එය දෝෂයක් බව වටහා නොගෙන, ඔබ ටෝකනකරණය ගැන සිතීමට පුරුදු වී සිටී නම් සහ සම්පාදක ක්‍රමලේඛකයින් සිතන ආකාරයට විග්‍රහ කරයි. ටෝකනකරණය සහ විග්‍රහ කිරීම ගැන. මූලික වශයෙන්, ඔබ දැනටමත් ඔබේ විධිමත් ව්‍යාකරණ නිර්වචනය කර ඇත්නම්, යමෙකු සින්ටැක්ටික් විශේෂ අවස්ථාවක් ඉදිරිපත් කරයි - ත්‍රිකෝණ, බැක්ස්ලෑෂ්-නිව්ලයින්, ASCII ට පමණක් සීමා වූ ප්‍රභව ලිපිගොනු වල අත්තනෝමතික යුනිකෝඩ් අක්ෂර කේතනය කිරීම, කුමක් වුවත් - එය ගැටගැසීමට අවශ්‍ය නම්, එය පහසුය එම විශේෂ අවස්ථාව භාවිතා කිරීම අර්ථවත් වන තැනට අවධානය යොමු කිරීම සඳහා ටෝකනයිසර් නැවත අර්ථ දැක්වීමට වඩා ටෝකනයිසර්ට පෙර පරිවර්තන අවසර පත්‍රයක් එක් කරන්න .

1 පදිකයින් සඳහා: සී හි මෙම අංගය 100% චේතනාන්විත බව මම දනිමි, තාර්කිකත්වය සමඟ - මම මෙය සාදන්නේ නැත - එය අත්තනෝමතික ලෙස දිගු රේඛා සහිත ඇණ ගැසූ කාඩ්පත් මත යාන්ත්‍රිකව බලහත්කාරයෙන් ගැලපෙන කේතයක් ලබා ගැනීමට ඔබට ඉඩ සලසයි. එය තවමත් වැරදි නිර්මාණ තීරණයක් විය.


17
එය නිර්මාණ දෝෂයක් යැයි කීමට තරම් මා නොයනු ඇත . එය දුර්වල නිර්මාණ තේරීමක් හෝ අවාසනාවන්ත ප්‍රතිවිපාක සහිත තේරීමක් බව මට ඔබ සමඟ එකඟ විය හැකිය, නමුත් මම තවමත් සිතන්නේ එය භාෂා නිර්මාණකරුවන් අදහස් කළ ආකාරයටම ක්‍රියාත්මක වන බවයි: ASCII කේතන ක්‍රමය පවත්වා ගෙන යන අතරම ගොනුවේ ඕනෑම තැනක ඕනෑම යුනිකෝඩ් අක්ෂරයක් භාවිතා කිරීමට එය ඔබට හැකියාව ලබා දෙයි. ගොනුවේ.
aioobe

12
එසේ \uපැවසුවහොත්, අෂ්ටක අංකනය සඳහා ප්‍රමුඛ ශුන්‍යයන් භාවිතා කිරීමේදී සී හි නායකත්වය අනුගමනය කිරීමට ගත් තීරණයට වඩා සැකසුම් අවධිය තෝරා ගැනීම විකාරයකි. අෂ්ටක අංකනය සමහර විට ප්‍රයෝජනවත් වන අතර, ප්‍රමුඛ ශුන්‍යයක් එය දැක්වීමට හොඳ ක්‍රමයක් වන්නේ මන්දැයි කිසිවෙකු තර්ක කිරීමක් මා අසා නැත.
සුපර් කැට්

3
upsupercat එම අංගය C89 වෙතට විසි කළ අය මුල සිටම අංගයක් සැලසුම් කරනවාට වඩා මුල් K&R පෙර සැකසුම්කරුගේ හැසිරීම සාමාන්‍යකරණය කළහ. ඔවුන් පන්ච් කාඩ් හොඳම භාවිතයන් ගැන හුරුපුරුදු බවට මට සැකයක් ඇති අතර, මෙම අංගය එහි ප්‍රකාශිත අරමුණු සඳහා කවදා හෝ භාවිතා කර ඇති බවට මට සැකයක් ඇත.
zwol

8
u සුපර්කැට් \uU + 0000..U + 007F පරාසය තුළ අක්ෂර නිෂ්පාදනය කිරීම තහනම් කර ඇත්නම් ජාවා සමඟ පූර්ව ටෝකනකරණ පරිවර්තනයක් ලෙස මට ගැටළුවක් ඇති නොවනු ඇත. එය "මෙය සෑම තැනකම ක්‍රියාත්මක වේ" සහ "මෙය සින්ටැක්ටික් වැදගත්කමක් ඇති ASCII අක්ෂර අන්වර්ථ කරයි", එය අමුතු සිට පැතලි වැරදි දක්වා පහත හෙලයි.
zwol

4
ඔබේ "කෙනෙකුට තර්ක සඳහා" මත: ඇත්ත ඒ කාලයේ මේ //එක් පේලියක් කෙනෙක් සිටියේ නැත . හා C නව රේඛාවක් නොවන බව ප්රකාශ ටර්මිනේටර් කර ඇති බැවින්, එය බොහෝ දුරට දිගු නූල්, මම "string ප්රායෝගික අකාර" තීරණය කළ හැකි දුර මෙන් හැර භාවිතා කරනු ලබන අතර විය K & R සිට එහි.
මාර්ක් හර්ඩ්

22

මෙය හිතාමතාම සැලසුම් තේරීමක් වූ අතර එය ජාවා හි මුල් සැලසුම දක්වා දිව යයි.

"අදහස් දැක්වීමේදී යුනිකෝඩ් පැන යාමට අවශ්‍ය කාටද?" යනුවෙන් අසන අයට, මම සිතන්නේ ඔවුන් ස්වදේශීය භාෂාව ලතින් අක්ෂර කට්ටලය භාවිතා කරන අය බවයි. වෙනත් වචන වලින් කිවහොත්, ජාවා වැඩසටහනක නීත්‍යානුකූල ඕනෑම තැනක, බොහෝ විට අදහස් සහ නූල් වලින් අත්තනෝමතික යුනිකෝඩ් අක්ෂර භාවිතා කිරීමට ජාවාහි මුල් සැලසුමට ආවේණික ය.

මූලාශ්‍ර පෙළ බැලීමට භාවිතා කරන වැඩසටහන් වල (IDE වැනි) අඩුපාඩුවක් වන අතර, එවැනි වැඩසටහන් වලට යුනිකෝඩ් ගැලවීම අර්ථ නිරූපණය කළ නොහැකි අතර ඊට අනුරූප ග්ලයිෆොසයක් පෙන්විය හැකිය.


8
වර්තමානයේ අපි අපගේ ප්‍රභව කේතය සඳහා යූටීඑෆ් -8 භාවිතා කරන අතර යුනිකෝඩ් අක්ෂර කෙලින්ම භාවිතා කළ හැකිය.
Paŭlo Ebermann

21

මෙය නිර්මාණ අත්වැරැද්දක් බව මම wzwol සමඟ එකඟ වෙමි; නමුත් මම ඊටත් වඩා විවේචනාත්මකයි.

\uපලායාම නූල් සහ වර්‍ගවල ප්‍රයෝජනවත් වේ; එය පැවතිය යුතු එකම ස්ථානය එයයි. එය අනෙක් පලායාම මෙන් හැසිරවිය යුතුය \n; සහ හරියටම අදහස් "\u000A" කළ යුතුය"\n" .

තිබීමේ තේරුමක් නැත \uxxxxඅදහස් දැක්වීමේ - කිසිවෙකුට එය කියවිය නොහැක.

ඒ හා සමානව, භාවිතා කිරීමේ තේරුමක් නැත \uxxxx වැඩසටහනේ වෙනත් කොටසක . එකම ව්‍යතිරේකය බොහෝ විට පොදු ඒපීඅයි වල සමහර ඇස්කි නොවන අක්ෂර අඩංගු වීමට බල කෙරී ඇත - අප එය අවසන් වරට දුටු අවස්ථාව කුමක්ද?

1995 දී නිර්මාණකරුවන්ට ඔවුන්ගේ හේතු තිබුනද වසර 20 කට පසුව මෙය වැරදි තේරීමක් ලෙස පෙනේ.

(පා readers කයන්ට ප්‍රශ්නය - මෙම ප්‍රශ්නය නව ඡන්ද ලබා ගන්නේ ඇයි? මෙම ප්‍රශ්නය ජනප්‍රිය තැනකින් සම්බන්ධ වී තිබේද?)


5
මම හිතන්නේ, ඔබ ඒපීඅයි වල ASCII නොවන අක්ෂර භාවිතා කරන තැනක් නොවේ. එය භාවිතා කරන පුද්ගලයින් සිටී (මා නොවේ), උදා: ආසියානු රටවල. ඔබ ASCII නොවන අක්ෂර හඳුනාගැනීම් වලදී භාවිතා කරන විට, ලේඛන විවරණ වලදී ඒවා තහනම් කිරීම එතරම් තේරුමක් නැත. එසේ වුවද, ටෝකනයක් තුළ ඒවාට ඉඩ දීම සහ ටෝකනයක අර්ථය හෝ සීමාව වෙනස් කිරීමට ඔවුන්ට ඉඩ දීම වෙනස් දේවල් වේ.
හොල්ගර්

15
ඔවුන්ට නිසි ගොනු කේතන ක්‍රමයක් භාවිතා කළ හැකිය. int \u5431ඔබට කළ හැකි විට ලියන්නේ ඇයිint 整
ෂොං යූ

3
විට ඔබ කරන්නේ කුමක්ද ඔබ ඔවුන්ගේ API එරෙහිව කේතය සම්පාදනය කිරීමට ඇති අතර (එහි පැතිර නොවන බව උපකල්පනය නිසි කේතනය කරන්න බැහැ UTF-81995 දී සහාය). ඔබට එක් ක්‍රමයක් ඇමතිය යුතු අතර ඔබේ මෙහෙයුම් පද්ධතියේ ආසියානු භාෂා ආධාරක පැකේජය ස්ථාපනය කිරීමට අවශ්‍ය නැත (මතක තබා ගන්න, අනූව දශකය) එම තනි ක්‍රමය සඳහා…
හොල්ගර්

5
1995 ට වඩා දැන් පැහැදිලිව පෙනෙන දෙය නම් ඔබට වැඩසටහන් කිරීමට අවශ්‍ය නම් ඔබ ඉංග්‍රීසි හොඳින් දැන සිටීමයි. ක්‍රමලේඛනය ජාත්‍යන්තර අන්තර්ක්‍රියාකාරිත්වයක් වන අතර සෑම සම්පතක්ම පාහේ ඉංග්‍රීසියෙන් ඇත.
ෂොං යූ

8
මෙය වෙනස් වී ඇතැයි මම නොසිතමි. ජාවාගේ ලියකියවිලි බොහෝ විට ඉංග්‍රීසි විය. ජපන් පරිවර්තනයක් ටික කලක් පවත්වා ගෙන ගිය නමුත් භාෂා දෙකක් නඩත්තු කිරීම ලෝකයේ සියලුම ප්‍රදේශ සඳහා එය නඩත්තු කිරීමේ අදහසට සැබවින්ම පිටුබලය නොදක්වයි (එය එය ප්‍රතික්ෂේප කළේය). ඊට පෙර, කෙසේ හෝ හඳුනාගැනීම් වල යුනිකෝඩ් සහාය ඇති ප්‍රධාන ධාරාවේ භාෂාවක් නොතිබුණි. ඉතින් මම අනුමාන කරනවා, කවුරුහරි හිතුවා දේශීයකරණය කළ ප්‍රභව කේතය ඊළඟ ලොකු දෙයක් කියලා. මම ස්තූතිවන්තව කියමි , එය ඉවත් වූයේ නැත.
හොල්ගර්

11

යුනිකෝඩ් පැන යාම ක්‍රියාත්මක වූයේ ඇයිද යන්නට පිළිතුරු දිය හැකි එකම පිරිස පිරිවිතරයන් ලියූ අයයි.

මෙයට පිළිගත හැකි හේතුවක් නම්, ජාවා ප්‍රභව කේතයේ හැකි සෑම අක්ෂරයක්ම සමස්ත BMP ටම ලබා දීමට ඇති ආශාවයි. මෙය ගැටළුවක් වුවද:

  • ඔබට ඕනෑම BMP අක්‍ෂරයක් භාවිතා කිරීමට හැකි විය යුතුය.
  • ඕනෑම BMP අක්ෂරයක් සාධාරණ ලෙස ඇතුළත් කිරීමට ඔබට අවශ්‍යය. මෙය කළ හැකි ක්‍රමයක් වන්නේ යුනිකෝඩ් ගැලවී යාමයි.
  • ඔබට අවශ්‍ය වන්නේ ශබ්දකෝෂ පිරිවිතර මිනිසුන්ට කියවීමට හා ලිවීමට පහසු වන අතර ක්‍රියාත්මක කිරීමටද පහසුය.

යුනිකෝඩ් පැන යාම සටනට පිවිසෙන විට මෙය ඇදහිය නොහැකි තරම් දුෂ්කර ය: එය නව ලෙක්සර් රීති රාශියක් නිර්මාණය කරයි.

පහසුම ක්‍රමය නම් පියවර දෙකකින් ලෙක්සිං කිරීමයි: පළමුව සියලු යුනිකෝඩ් ගැලවී යාම එය නිරූපණය කරන චරිතය සමඟ ප්‍රතිස්ථාපනය කරන්න, ඉන්පසු ලැබෙන ලේඛනය යුනිකෝඩ් ගැලවී නොපවතින ලෙස විග්‍රහ කරන්න.

මෙහි උඩු යටිකුරු වන්නේ එය නියම කිරීම පහසුය, එබැවින් එය පිරිවිතර සරල කරයි, එය ක්‍රියාත්මක කිරීම පහසුය.

අවාසිය නම් ඔබේ ආදර්ශයයි.


2
නැතහොත්, හඳුනාගැනීම්, නූල් වචනාර්ථ සහ අක්ෂර නියතයන්ට \ uxxxx භාවිතය සීමා කරන්න. C11 කරන්නේ එයයි.
ninjalj

එය ඇත්ත වශයෙන්ම විග්‍රහ නීති රීති අවුල් කරයි, මන්ද ඒවා අර්ථ දක්වන්නේ ඒවාය, මා අනුමාන කරන්නේ එය එසේ වීමට හේතුවයි.
මාර්ටිජන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.