MS_Encoding - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒæåã³ãŒãïŒ
- ãšã³ã³ãŒãã£ã³ã°ãšã¯ãencodingãïŒãšã³ã³ãŒãïŒ - æå³-解説-説æ-å®çŸ© ïŒ ITçšèªèŸå
ž
https://e-words.jp/w/E382A8E383B3E382B3E383BCE38387E382A3E383B3E382B0.html- æ å ±ãäžå®ã®èŠåã«åŸã£ãŠããŒã¿ã«çœ®ãæããŠèšé²ããããšã
- ãã圢åŒã®ããŒã¿ãäžå®ã®èŠåã«åºã¥ããŠå¥ã®åœ¢åŒã®ããŒã¿ã«å€æããããšã
- ïŒæåãšã³ã³ãŒãã£ã³ã°ã ãã§ãªããïŒããŒã¿å§çž®ãæå·åãªã©ãããã«å«ãŸããã
äœè«ïŒã»ã»ã»ãšãªããšã
Stream ã« Decorate ãã¿ãŒã³ãé©çšãã
æ®ã©ã®åŠçãïŒãšã³ã³ãŒãã£ã³ã°ãšèšãäºã«ãªãã
è£è¶³ïŒåæã®ãäœè«ãã¯çãå°ãŠããïŒ: .NET ã®
Streamã¯
Decorator ãã¿ãŒã³ã§èšèšãããŠããã
ã倿ããå±€ãšããŠéããæ§é ã«ãªã£ãŠããã// å§çž® â æå·å â æåãšã³ã³ãŒãã£ã³ã° ãéãã using var file = File.Create("data.bin"); using var crypto = new CryptoStream(file, encryptor, CryptoStreamMode.Write); using var gzip = new GZipStream(crypto, CompressionMode.Compress); using var writer = new StreamWriter(gzip, Encoding.UTF8); writer.Write("æ¬æ");ãå±€ã®éãªãã stringïŒæåïŒ â StreamWriterïŒæåãšã³ã³ãŒãã£ã³ã°ïŒ byte[] â GZipStreamïŒããŒã¿å§çž®ïŒ byte[] â CryptoStreamïŒæå·åïŒ byte[] â FileStreamïŒæ°žç¶åïŒã©ã®å±€ãããã€ãå â ãã€ãåãã®å€æã§ããã
æåãšã³ã³ãŒãã£ã³ã°ã ããç¹å¥ãªããã§ã¯ãªãã
ãšããåæã®ææã¯ãã®ãŸãŸæ£ããã
æåãšã³ã³ãŒãã£ã³ã°ã¯ãæäžå±€ïŒæåãšãã€ãã®å¢çãã«äœçœ®ããç¹ã ãã
ä»ãšç°ãªãïŒããã ãstringã絡ãïŒã
ã³ã³ã§ã¯åçš®ãæåãšã³ã³ãŒãã£ã³ã°ã®æ
å ±ãçºããŠããŸãã
ãå€åãã«ã€ããŠã¯ããWindowsã®å€åããåç
§äžããã
æåãšã³ã³ãŒãã£ã³ã°ãšã¯ãæååããŒã¿ãã
ç°ãªãæåã³ãŒãïŒã³ãŒãããŒãžïŒã䜿çšãããã€ã衚çŸã«å€æããããšã§ããã
- æåã³ãŒã - Wikipedia
https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89 - ã³ãŒãããŒãž - Wikipedia
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8
è£è¶³ïŒçšèªã®æŽçïŒ: ãæåã³ãŒãããšããèªã¯è€æ°ã®å±€ãæ··ããŠ
䜿ããããããæ··ä¹±ã®å ã«ãªããå³å¯ã«ã¯ 3 å±€ã«åãããã
å±€ æå³ äŸ ç¬Šå·åæåéåïŒCoded Character SetïŒ ãã©ã®æåã«ãã©ã®çªå·ãæ¯ããã JIS X 0208ãUnicodeãASCII æå笊å·åæ¹åŒïŒCharacter Encoding SchemeïŒ ããã®çªå·ããã©ããã€ãåã«ãããã Shift_JISãEUC-JPãUTF-8ãUTF-16 ã³ãŒãããŒãž Microsoft / IBM ã笊å·åã«æ¯ã£ãçªå· 932ïŒCP932ïŒã65001ïŒUTF-8ïŒ ãUnicode ã®å Žåã æåããã â 笊å·åæåéåïŒUnicodeïŒãçªå·ã決ãã U+3042ïŒã³ãŒããã€ã³ãïŒ â æå笊å·åæ¹åŒã ãã€ãåã«ãã UTF-8 â E3 81 82ïŒ3 ãã€ãïŒ UTF-16 â 42 30ïŒãªãã«ãšã³ãã£ã¢ã³ã2 ãã€ãïŒ UTF-32 â 42 30 00 00ïŒ4 ãã€ãïŒãUnicodeããšãUTF-8ãã¯åãå±€ã®ãã®ã§ã¯ãªãã
Unicode ã¯æåéåãUTF-8 ã¯ãã®ç¬Šå·åæ¹åŒã§ããã
Windows ãèšããUnicodeãã¯ãå€ãã®å Žå UTF-16 LE ãæã
ïŒEncoding.Unicodeã UTF-16 LE ã§ããã®ã¯ãã®ããïŒã
æååãã¯ãäžè¬çã«ã
- ãšã³ã³ãŒãã«é©åãªæåã³ãŒãïŒã³ãŒãããŒãžïŒãæå®ããŠããªã
- ãã©ãããã©ãŒã ããŠãŒã¶éã§äœ¿çšããŠããå€åãç°ãªã
- ã³ãŒãããŒãžã«ãã£ãŠã¯ã倿ãäžå¯éãªã±ãŒã¹ããã
éã«çºçããŸãã
æåã³ãŒãïŒã³ãŒãããŒãžïŒæå®ã倧ãã誀ã£ãŠããå Žåã¯ãããæ°ãä»ãã®ã§ããã
- UTF-16ïŒUnicodeïŒ
- UTF-8
- Shift JIS
- EUC-JP
äžéšã ãæååãããå Žåã®ãã©ãã«ã·ã¥ãŒãã¯èŠæŠããããšãå€ãã§ãã
äžéšã ãæååããããã¿ãŒã³ã¯ä»¥äžã®æ§ã«åé¡ã§ãããšèããŸãã
-
æåã³ãŒãïŒã³ãŒãããŒãžïŒæå®ã倧ããééããŠããªãïŒåŸ®åŠã«ééã£ãŠããïŒ
- äŸãã°ãShift_JIS ã®äºçš®ã®ã³ãŒãããŒãžæå®ã誀ã£ãŠããã
- ISO-2022-JP
- Microsoft ã³ãŒãããŒãž932ïŒCP932ïŒ
- MacJapanese
- äŸãã°ãShift_JIS ã®äºçš®ã®ã³ãŒãããŒãžæå®ã誀ã£ãŠããã
-
å€åé åã®å®çŸ©ïŒèŠãç®ïŒãç°ãªã£ãŠããã
- ãã®å ŽåãããŒã¿ã®ãšã³ã³ãŒãèªäœã¯æ£ããè¡ãããŠããã
- 人éã«ãšã£ãŠã®èŠãç®ããç°ãªã£ãŠããããæååããšæããããã
- å€åã«ã€ããŠã¯ãã¡ããåç §ïŒãWindowsã®å€åã
è£è¶³ïŒãã®åé¡ã¯ä»ãæå¹ïŒ: ã倧ããééããæååãããš
ãäžéšã ãã®æååãããåãããšããåæã®èŠç¹ã¯ã
é害åãåãã®æé ãšããŠãã®ãŸãŸäœ¿ããã
çç¶ åå ã®èŠåœ å šéšãåããïŒãèï¿œïœæå§çžºï¿œãçïŒ ãšã³ã³ãŒãã£ã³ã°ã®æå®éãããŸãçã å šéšã ?ã«ãªã倿å ã«ååšããªãæåïŒäŸïŒUTF-8 â ASCIIïŒ äžéšã®èšå·ã ãåããïŒããâãâ ãã±ïŒ CP932 ã®äºçš®éãããŸãã¯æ³¢ããã·ã¥åé¡ïŒäºäŸïŒïŒ äžéšã®æŒ¢åã ãåããïŒé«ãïšïŒ å€åã»æ©çš®äŸåæåããŸã㯠JIS2004 â¡ãã»ã§è¡šç€ºããããã©ã³ãã«ãã®åããªãïŒããŒã¿ã¯æ£ããïŒ 1 æåã 2 æåã«èŠãã ãµãã²ãŒã ãã¢ã®æ±ãïŒæåã®ãã§ãã¯æ¹åŒïŒ æåŸã® 2 ã€ã¯ãæååããã§ã¯ãªãç¹ãéèŠã§ããã
ããŒã¿ã¯æ£ããã衚瀺åŽã®åé¡ãªã®ã§ã
ããŒã¿ãçŽãããšãããšäºæ ãæªåããã
åŸã£ãŠã以äžã«æ³šæãæãå¿ èŠããããŸãã
-
ãã©ãããã©ãŒã
- å®è£ ãããŠããæåã³ãŒãïŒã³ãŒãããŒãžããã©ã³ãïŒ
- é©çšãããæšæºã®ãšã³ã³ãŒãã£ã³ã°ãäœãïŒ
- ãã©ã³ããå€åãã€ã³ã¹ããŒã«ãããŠãããïŒ
-
ãšã³ã³ãŒãã£ã³ã°ãåäœããç®æ
-
ãã¡ã€ã« I/O
-
SGML ææžã® I/O
- HTML åºå
- XML å ¥åºå
-
ãã¡ã€ã«è»¢éïŒãããã³ã«ã«å®è£ ãããŠããã±ãŒã¹ïŒ
- SFUïŒMicrosoft Windows Services for UNIXïŒ
- FTPïŒASCII ã¢ãŒãïŒ
-
ããŒã¿ããŒã¹ã® I/O
Unicode æåå以å€ã®ãã£ãŒã«ãããå ¥åºåããå Žåã
éåžžãç §åé åºã§æå®ããã«å¯Ÿå¿ããæåã³ãŒãïŒã³ãŒãããŒãžïŒ
ã䜿çšããŠããšã³ã³ãŒãã»ãã³ãŒããããã
-
è£è¶³ïŒããšã³ã³ãŒãã£ã³ã°ãåäœããç®æãã®çŸåšçïŒ: åæã®
**ãå¢çãæ°ãäžããã**ãšããçºæ³ãæ¬è³ªã§ã
çŸåšã®ã·ã¹ãã ã§ãåãæé ã§æŽãåºããããæåãšãã€ãã®å¢çïŒãšã³ã³ãŒãã£ã³ã°ãåãå Žæã â ãã¡ã€ã« I/O ⊠StreamReader/Writer ã® encoding åŒæ° â¡ HTTP ⊠Content-Type ã® charsetãURL ãšã³ã³ãŒã ⢠HTML / XML / JSON ⊠宣èšãšå®äœã®äžäžèŽ â£ ããŒã¿ããŒã¹ ⊠åã®åïŒvarchar / nvarcharïŒãšç §åé åº â€ ã³ã³ãœãŒã« ⊠Console.OutputEncodingã端æ«ã®ã³ãŒãããŒãž ⥠ããã»ã¹é âŠ æšæºå ¥åºåã®ãªãã€ã¬ã¯ããåŒæ° ⊠å§çž®ãã¡ã€ã« ⊠ZIP ã®ãã¡ã€ã«åã®ãšã³ã³ãŒãã£ã³ã°ïŒ!ïŒ â§ ã¡ãŒã« ⊠MIME ã®ããããšãã㣠⚠CSV / åºå®é·ãã¡ã€ã« ⊠BOM ã®æç¡ãæ¹è¡ã³ãŒã**çŸåšã®æéã¯ãå¢çãæžããã**ã§ããã
ã»å éšã¯åžžã« UTF-16ïŒ.NET ã® stringïŒã§æ±ã ã»å€éšãšã®å ¥åºåã¯ãåå UTF-8ãã«çµ±äžãã ã»å€æãå¿ èŠãªç®æããã·ã¹ãã ã®ç«¯ã«éçŽããã â äžéå±€ã§å€æãããšãã©ãã§å£ãããåãããªããªã⊠ZIP ã®ãã¡ã€ã«åã¯çŸåšãäºæ ãå€ãã
å€ã ZIP ã¯ãã¡ã€ã«åã CP932 ã§æã€ããã
UTF-8 åæã®ããŒã«ã§éããšåããïŒéãåãïŒã// .NET ã§ CP932 ã®ãã¡ã€ã«åãæã€ ZIP ãèªã ZipFile.ExtractToDirectory("a.zip", "out", Encoding.GetEncoding(932));
ãã©ãããã©ãŒã ã«å®è£ ãããŠããæåã³ãŒãïŒã³ãŒãããŒãžããã©ã³ãïŒã«èµ·å ããæååãã
-
Microsoft ã³ãŒãããŒãž932 - Wikipedia
https://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932-
ã€ã³ã¿ãŒãããäžã§ã® Windows-31J ã®å©çšã«ã€ããŠ ïœ NEC ç¹æ®æåã»IBM æ¡åŒµæå
- IBM æ¡åŒµæåçã® Windows-31J ç¬èªè¿œå ã®æåã¯ã
ä»ã® JIS X 0208 éç»é²ã® CJK çµ±åæŒ¢åã«æ¯ã¹ãŠã
ç°æ©çš®ïŒOS / ã¢ããªã±ãŒã·ã§ã³ïŒéã§ã®ããŒã¿äº€æãã
æååããèµ·ããããããã«ããŒã¿ã®ããåããæ£åžžã«è¡ãã確çãé«ãã - ããããJIS X 0208 éç»é²ã®æåããµããŒãããªãç°å¢ãããããšãèãããšã
JIS X 0208 ç»é²æåã ããçšããŠããŒã¿äº€æãè¡ã£ãæ¹ããåé¡ãèµ·ããã«ããã
- IBM æ¡åŒµæåçã® Windows-31J ç¬èªè¿œå ã®æåã¯ã
-
JIS X 0208 - Wikipedia
https://ja.wikipedia.org/wiki/JIS_X_0208
-
-
Windowsã®æ©çš®äŸåæå - CyberLibrarian
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/mdc.html- NEC æ©çš®äŸåæå
- NEC ã® IBM æ¡åŒµæå
- IBM æ¡åŒµæå
è£è¶³ïŒæ©çš®äŸåæåã®å®éïŒ: CP932 ã JIS X 0208 ã«è¿œå ããé åã
äºæ ã®æž©åºã§ããã
é å å 容 äŸ NEC ç¹æ®æåïŒ13 åºïŒ äžžæ°åãããŒãæ°åãåäœèšå· â â¡ â â ¡ ã± â¡ â NEC éžå® IBM æ¡åŒµæåïŒ89ïœ92 åºïŒ IBM æ¡åŒµæåã®éè€å®çŸ© å å € å ⊠IBM æ¡åŒµæåïŒ115ïœ119 åºïŒ 人åã»å°åã®æŒ¢åãèšå· é« ïš åœ çº NEC éžå® IBM æ¡åŒµæåãš IBM æ¡åŒµæåã¯ã
åãæåã« 2 ã€ã®ã³ãŒããå²ãåœãŠãããŠããïŒéè€ç¬Šå·åïŒã
ãããåŸåŸ©å€æã§å€ãå€ããåå ã«ãªãããå ãã Unicode â CP932 ã«å€æãããš 0xFA5CïŒIBM æ¡åŒµïŒã«ãªããã å ããŒã¿ã 0xED40ïŒNEC éžå®ïŒã ã£ãå Žåãå€ãå€ãã£ãŠæ»ã â ãã€ãåã§æ¯èŒããåŠçïŒãã§ãã¯ãµã ãéè€å€å®ïŒãå£ããåæã®çµè«ââãJIS X 0208 ç»é²æåã ããçšãããââã¯
ããŒã¿äº€æã®æéãšããŠã¯ä»ãæ£ããã
ãã ãçŸå®ã«ã¯ãæ°åã«ãé«ããïšããå ¥ãããé¿ããããªãã
çŸåšã®è§£ã¯ãã·ã¹ãã å šäœã UTF-8 / Unicode ã§éãããšã§ãã
ïŒã¢ããªã±ãŒã·ã§ã³ã®UnicodeåïŒã
ãã©ãããã©ãŒã ã§é©çšãããæšæºã®ãšã³ã³ãŒãã£ã³ã°ã«èµ·å ããæååãã
-
ïŒ ITïŒäºäŸã«åŠã¶Webã·ã¹ãã éçºã®ã¯ã³ãã€ã³ãïŒ8ïŒ
http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html#ap04- .NET ã§ã¯æšæºã§ãShift_JIS ïŒ MS932 ãšãªããã
- Java ã§ã¯ Shift_JIS â MS932 ãšãªãããã
è£è¶³ïŒãã®å·®ã¯ä»ãæ®ã£ãŠããïŒ: åæã®ææã¯çŸåšãæå¹ã§ã
.NET ãš Java ã®ç°ç𮿷·åšã·ã¹ãã ã§å®éã«èµ·ããã
æå® .NET Java "Shift_JIS"CP932 ãšåãïŒïŒ MS932ïŒ JIS X 0208 æºæ ãæ©çš®äŸåæåãåãã "MS932"ïŒãã®ååã¯äœ¿ããªãïŒ CP932 çžåœ "Windows-31J"CP932 CP932 çžåœ ãäºæ ã®ãã¿ãŒã³ã .NET åŽïŒ Encoding.GetEncoding("Shift_JIS") ã§ãâ ããæžãåºã â 0x8740ïŒCP932 ãšããŠæ£ããïŒ Java åŽïŒ new String(bytes, "Shift_JIS") ã§èªã â ã?ãã«ãªãïŒJIS X 0208 ã« â ããªãããïŒ ã察çã Java åŽã§ "Windows-31J" ãæç€ºãããšã³ã³ãŒãã£ã³ã°åã¯ãå¥åããå€ããå®äœãåŠçç³»ã§ç°ãªãââ
ãããæèšã§ããã
ææ§ãã®ãªãååïŒWindows-31JãUTF-8ïŒã䜿ãã
äž¡ã·ã¹ãã ã®å®è£ ã確èªããã
ãã©ã³ããå€åã®ã€ã³ã¹ããŒã«ç¶æ³ã«èµ·å ããæååãã
- ãã¡ããåç §ïŒãWindowsã®å€åã
ã³ãŒãããŒãžã«ãã£ãŠã¯ã倿ãäžå¯éãªã±ãŒã¹ãããã
-
JA16SJIS â Unicode æ¹åãžã®å€æã«ãããŠã
Unicode ã®æåããŒã¿ã« U+FF5E ãæž¡ããããš 0x8160 ã«å€æãããã -
éåãã® JA16SJIS â Unicode æ¹åãžã®å€æã«ãããŠã
JA16SJIS ã®å ¥åããŒã¿ã« 0x8160 ãæž¡ããããšãU+FF5E ã§ã¯ãªã U+301C ã«å€æãããã
ãã®å€æã¯ãããŸã§ã Unicode ãã JA16SJIS æ¹åãžã®çæ¹åã®å€æã«ãããŠã®ã¿é©çšãããã
ç§»è¡ã¡ã¢ïŒåæã®æ¹å衚èšãå ¥ãæ¿ãã£ãŠããïŒ: åæã¯
**1 çªç®ã 2 çªç®ããJA16SJIS â Unicode æ¹åããšæžããŠãããã
å 容ããèŠãŠ1 çªç®ã¯ãUnicode â JA16SJIS æ¹åã**ãæ£ãã
ïŒãUnicode ã®æåããŒã¿ã« U+FF5E ãæž¡ããããšããšããããïŒã
æçµè¡ã®ãUnicode ãã JA16SJIS æ¹åãžã®çæ¹åã®å€æããšããèšè¿°ãšãæŽåããããã®çŸè±¡ã¯ãæ³¢ããã·ã¥åé¡ããšããŠç¥ãããã
æ¥æ¬èªã·ã¹ãã ã§æãæåãªæååãã§ããããåé¡ã®æ§é ã Shift_JIS ã® 0x8160ïŒ1 ãã€ãç® 0x81ã2 ãã€ãç® 0x60ïŒ â ãã® 1 æåã«ãUnicode ã®åè£ã 2 ã€ãã U+301C ã WAVE DASHïŒæ³¢ããã·ã¥ïŒ â JIS ã®èŠæ Œäžã¯ãã¡ã U+FF5E ïœ FULLWIDTH TILDEïŒå šè§ãã«ãïŒ â Microsoft ã¯ãã¡ãã«å¯Ÿå¿ä»ãã
察å¿ä»ã æ¡çšããŠããåŠçç³» 0x8160 â U+FF5E Windows / .NETïŒCP932ïŒãå€ãã® Windows ã¢ã㪠0x8160 â U+301C Java ã® Shift_JISãUnix ç³»ãOracle ã® JA16SJISãiOS/macOS åããããã«èŠããã®ã«ããã€ãå€ãéãããã
ã»æå忝èŒãäžèŽããªãïŒèŠãç®ã¯åããªã®ã«ïŒ ã»DB ã®æ€çŽ¢ã§ãããããªã ã»åŸåŸ©å€æã§å¥ã®æåã«ãªã ã»Windows ã§å ¥åããããŒã¿ã Oracle ã«å ¥ãããšåããåçš®ã®åé¡ãèµ·ããæåïŒUnicode 察å¿ã 2 éãããïŒ:
æå JIS ç³» Microsoft ç³» ãïŒæ³¢ããã·ã¥ïŒ U+301C U+FF5E âïŒåæ±ïŒ U+2016 U+2225 âïŒè² 笊å·ïŒ U+2212 U+FF0D ï¿ ï¿¡ ï¿¢ U+00A2 U+00A3 U+00AC U+FFE0 U+FFE1 U+FFE2 çŸåšã®å¯Ÿç:
â ãã·ã¹ãã å šäœã UTF-8 ã«çµ±äžããã â 倿èªäœããªãããæãç¢ºå® â¡ å€æãé¿ããããªããªãããæ£èŠåããŒãã«ãæã€ã â å ¥åæã« U+FF5E â U+301C çãžå¯ããïŒã©ã¡ããã«çµ±äžïŒ ⢠ãUnicode æ£èŠåïŒNFKCïŒãæããã â ãã ã NFKC ã¯å šè§è±æ°ãåè§ã«ããçã圱é¿ãåºããèŠæ³šæ// â¡ ã®äŸïŒå ¥åæã«æ³¢ããã·ã¥ç³»ãçµ±äžãã static string NormalizeWaveDash(string s) => s .Replace('ïœ', 'ã') // ïœ â ã .Replace('ïŒ', 'â') // ïŒ â â .Replace('â¥', 'â'); // ⥠â â
-
ãµããŒãããã³ãŒã ããŒãž
https://learn.microsoft.com/ja-jp/windows/win32/intl/code-page-identifiers -
Microsoft ã³ãŒãããŒãž932 - Wikipedia
https://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932-
CP932 ã®åŒç§°ïŒå¥åïŒã®æŽç
-
Windows-31J
Windows 3.1 (J) ã®ãªãªãŒã¹ã«åãããŠããã€ã¯ããœããã
IBM ãšæ¥æ¬é»æ° (NEC) ã®ã³ãŒããçµ±åããŠäœã£ã笊å·åæåéåã
1993 幎以éããã€ã¯ããœãããèªç€Ÿã®ããã¥ã¡ã³ãçã§ãCP932ããšããçšèªã䜿ã£ãŠ
衚ããŠãã察象ã¯ãåžžã«ãã®ãWindows-31Jãã§ããããã®åå㯠IANA ã«ç»é²ãããŠããã -
MS932
Java ã§ããIBM ã®ã³ãŒãããŒãž 932ããšãWindows-31Jããåºå¥ããããã®çšèªã -
CP932
MS-DOS ãš Windows ã«ãããæ¥æ¬èªã³ãŒãããŒãžã衚ãçšèªã
ãWindows-31Jããå¶å®ããããŸã§ã¯ãOEM ãã³ãã«ãã£ãŠæåéåãéãã -
MS 挢åã³ãŒã
ãCP932ããšã»ãŒåãæå³ã®çšèªã§ããã
ãã€ã¯ããœãããïŒShift_JIS ãšãã笊å·åæ¹åŒãïŒçå®ãããšããç¹ãã
ãã€ã¯ããœãããïŒJIS X 0208 ãšããæåéåã«å¯ŸããŠïŒæåãç¬èªã«è¿œå ããç¹ã
匷調ãããå Žåã«çšããããããŸããåã«ãã·ãã JISãã®ããšãæããŠããå Žåãããã -
OEM ã³ãŒãããŒãž 932
Windows 3.1 æ¥æ¬èªçã®çºå£²ä»¥åã«ããããOEM ãã³ãåèªã®æ¡åŒµãèš±ãã仿§ã®æåã»ããã
以äžã¯ããã€ã¯ããœããããé¢ããçŸåšã§ã¯å ¬çæ©é¢ãããèªããããæå笊å·åæ¹åŒãæãçšèªã -
ã·ãã JIS
JIS X 0208 笊å·åæåéåãäžå®ã®èŠåã«åŸã£ãŠã·ããããæå笊å·åæ¹åŒã
å ·äœçãªå 容㯠JIS X 0208:1997 ã«ãã·ãã笊å·å衚çŸããšããŠèšèŒãããã
ããããæèã«ãã£ãŠã¯ãã³ãæ¡åŒµãããã³ãŒãã»ãããæããŠããå Žåãããã -
Shift_JIS
ãã·ãã JISãã® IANA ç»é²åã -
SJIS
Shift_JIS ã®ç瞮圢ãJava ã§ã¯ Shift_JIS ãšå矩èªã
-
-
ç§»è¡ã¡ã¢ïŒ
SJIS㯠Java ã§ã¯ Shift_JIS ãšå矩ã§ã¯ãªãïŒ: åæã®
æçµè¡ã¯æ£ç¢ºã§ãªããJava ã®SJISã¯Shift_JISã®å¥åãšããŠ
æ±ãããããäºäŸïŒã§è¿°ã¹ãéãã
Shift_JISèªäœã CP932 ãšã¯ç°ãªãããã
ãå矩èªããšãã衚çŸã¯èª€è§£ãæãã
Java ã§ CP932 çžåœã䜿ããããã°Windows-31JãŸãã¯MS932ãæå®ããã
è£è¶³ïŒ.NET ã§ã³ãŒãããŒãžã䜿ãéã®å¿ é æé ïŒ: .NET Core 以éã
Encoding.GetEncoding(932)ã¯æ¢å®ã§ã¯å€±æããã// â .NET Core / .NET 5+ ã§ã¯ ArgumentException var enc = Encoding.GetEncoding(932); // â ãããã€ããŒãç»é²ããŠãã䜿ã // NuGet: System.Text.Encoding.CodePages Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var enc = Encoding.GetEncoding(932);.NET Framework ã«ã¯å šã³ãŒãããŒãžãçµã¿èŸŒãŸããŠãããã
.NET Core 以é㯠UTF 系㚠ASCII / Latin-1 ã®ã¿ãæšæºã§ã
ãã以å€ã¯äžèšã®ããã±ãŒãžãèŠãïŒã¯ãã¹ ãã©ãããã©ãŒã åã®ããïŒãäž»ãªã³ãŒãããŒãž:
çªå· åå å 容 932 Shift_JIS / Windows-31J æ¥æ¬èªïŒCP932ïŒ 20932 EUC-JP æ¥æ¬èªïŒUnix ç³»ïŒ 50220/50222 ISO-2022-JP JIS ã³ãŒãïŒã¡ãŒã«ã§äœ¿ãããïŒ 1252 Windows-1252 西欧 65001 UTF-8 æ¢å®ã«ãã¹ããã® 1200 UTF-16 LE Windows ã®å éšè¡šçŸïŒ Encoding.UnicodeïŒ
Encoding.Defaultã®æå³ãå€ãã£ãç¹ã«æ³šæããã
.NET Framework .NET Core 以é Encoding.DefaultOS ã® ANSI ã³ãŒãããŒãžïŒæ¥æ¬èªãªã CP932ïŒ åžžã« UTF-8 æ§ã³ãŒãããç§»æ€ããéã
Encoding.Defaultã
æé»ã« CP932 ãæå³ããŠããç®æã¯å šãŠå£ããã
ç§»æ€æã¯æç€ºçã«Encoding.GetEncoding(932)ãžçœ®ãæããã
æååç §ïŒæ°å€æååç §ã»æåå®äœåç §ïŒã®ãšã³ã³ãŒãã£ã³ã°ïŒãšã¹ã±ãŒãïŒãè¡ãã
- æååç
§ - Wikipedia
https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%8F%82%E7%85%A7\ çŽæ¥èšè¿°ã§ããªãæåãèšå·ã HTMLã»XML äžã«è¡šèšãåç §ããããçšããããæ¹æ³ã-
ããŒã¯ã¢ããã§äœ¿ããããåè§ã®äžçå·ã<ããã>ã
-
æå®ã®æåã³ãŒãã§è¡šçŸã§ããªãæåã衚èšãåç §ããã
-
è¡šèšæ¹æ³ã«ãããæ°å€æååç §ããšãæåå®äœåç §ãã®äºçš®ãååšããã
-
æ°å€æååç §
10 or 16 鲿°ã§è©²åœæåã ISO 10646 ã®æåçªå·ã§æå®ããæ¹æ³ã
æå®ã®æåã³ãŒãã§è¡šçŸã§ããªãæåã衚èšãåç §ããã -
æåå®äœåç §
ç¹å®ã®ããŒã¯ãŒãæååã§è©²åœæåïŒäž»ã«ããŒã¯ã¢ããã§äœ¿ãããæåïŒãæå®ããæ¹æ³ã
XSSïŒã¯ãã¹ãµã€ãã»ã¹ã¯ãªããã£ã³ã°ïŒå¯ŸçãšããŠã䜿çšãããã
-
-
è£è¶³ïŒãšã¹ã±ãŒãã®æ£ããèãæ¹ïŒ: åæã¯
ãXSS 察çãšããŠã䜿çšãããããšæžããŠãããã
ããã¯çŸåšã®çè§£ã«æ²¿ã£ãŠæŽçããŠããå¿ èŠãããã**XSS 察çã®æ¬è³ªã¯ãåºåå ã®æèã«å¿ãããšã¹ã±ãŒãã**ã§ããã
HTML ãšã¹ã±ãŒãããããã°å®å šãã§ã¯ãªãã
åºåå ïŒæèïŒ å¿ èŠãªãšã¹ã±ãŒã HTML ã®æ¬æ < > & " 'â æååç §HTML ã®å±æ§å€ äžèšïŒå¿ ãåŒçšç¬Šã§å²ã <script>ã®äžJavaScript ã®ãšã¹ã±ãŒãïŒHTML ãšã¹ã±ãŒãã§ã¯äžååïŒ URL ã®äžéš URL ãšã³ã³ãŒãïŒåŸè¿°ïŒ CSS ã®äž CSS ã®ãšã¹ã±ãŒã <a href>ã®å€ã¹ããŒã ãæ€èšŒïŒ javascript:ã匟ãïŒ<!-- HTML ãšã¹ã±ãŒãããŠãé²ããªãäŸ --> <a href="javascript:alert(1)">ã¯ãªãã¯</a>.NET ã§ã®å®è£ :
// æèããšã«äœ¿ãåãã HttpUtility.HtmlEncode(s); // HTML æ¬æã»å±æ§ HttpUtility.JavaScriptStringEncode(s); // <script> å HttpUtility.UrlEncode(s); // URLASP.NET Core ã® Razor ã§ã¯
@å€ãèªåçã« HTML ãšã¹ã±ãŒãããã
ãããæã§ãšã¹ã±ãŒãããªãã®ãååã§ãã
ïŒäºéãšã¹ã±ãŒãã«ãªãïŒã
å±éºãªã®ã¯@Html.Raw()ã䜿ã£ãç®æã ãããšããç¶æ ã«ä¿ã€ã
HTTP ãããããmeta ã¿ã°ã«ãšã³ã³ãŒãã£ã³ã°ãæå®ããããšã§
WWW ãã©ãŠã¶ããã³ãŒãããéã«æå®ããæåã³ãŒãïŒã³ãŒãããŒãžïŒãæå®ããã
-
HTTP ããã
Content-Type: text/html; charset=Shift_JIS -
meta ã¿ã°
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-
ïŒ ITïŒJavaã®æååã察çFAQïŒ1ïŒ
http://www.atmarkit.co.jp/fjava/rensai3/mojibake01/mojibake01.html- 質å1ïŒWeb ãã©ãŠã¶ãæåã³ãŒããå€å®ããåºæºã¯äœã§ããïŒ
HTTP ãããããmeta ã¿ã°ã«ãšã³ã³ãŒãã£ã³ã°ãæå® - 質å2ïŒpage ãã£ã¬ã¯ãã£ãã§æåã³ãŒããæ£ããæå®ããæ¹æ³ã¯ïŒ
CGI æ¯ãHTML ãåºåããéã«æå®ããæ¹æ³ãååšããã
- 質å1ïŒWeb ãã©ãŠã¶ãæåã³ãŒããå€å®ããåºæºã¯äœã§ããïŒ
è£è¶³ïŒçŸåšã®æžãæ¹ãšåªå é äœïŒ: HTML5 ã§ã¯ çã圢åŒã䜿ããã
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <!-- â HTML5 ã®æžãæ¹ãå é 1024 ãã€ã以å ã«çœ®ã -->å€å®ã®åªå é äœïŒåŒ·ãé ïŒ:
â HTTP ãããã® Content-Type: charset=âŠ â æã匷ã â¡ BOMïŒãã€ã ãªãŒã㌠ããŒã¯ïŒ ⢠<meta charset="âŠ"> ⣠ãã©ãŠã¶ã®æšæž¬ / æ¢å®å€â ã ⢠ãäžæžãããããã
HTML ã« UTF-8 ãšæžããŠãããµãŒããå¥ã® charset ãè¿ãã°åããã
ãããå®åã§ããè©°ãŸãç¹ã§ãããçŸåšã®æé:
ã»ãUTF-8 以å€ã䜿ããªãã HTML Standard 㯠UTF-8 ãèŠæ±ããŠãã ã»HTTP ããããš meta ã®äž¡æ¹ã UTF-8 ã«æãã ã»meta charset ã¯ãhead ã®å é ä»è¿ãã«çœ®ã ïŒ1024 ãã€ããéãããšãã©ãŠã¶ãåè§£æããïŒ ã»BOM ã¯ä»ããªãïŒUTF-8 ã§ã¯äžèŠãä»ããŠã害ã¯å°ãªããäžèŠïŒASP.NET Core ã§ã¯æ¢å®ã§ UTF-8 ã䜿ãããããã
æç€ºçã«å€æŽããŠããªããã°åé¡ã¯èµ·ããªãã
ãããéšåã®èšè¿°ã DOM ãçè§£ããŠèªåçã«ãšã³ã³ãŒãã»ãã³ãŒãããŸãã
<?xml version="1.0" encoding="Shift_JIS"?>ç§»è¡ã¡ã¢ïŒåæã® XML 宣èšã«éãèšå·ã®èª€ããããïŒ: åæã¯
<?xml version="1.0" encoding="Shift_JIS">ãšæžããŠãããã
XML 宣èšã¯?>ã§éããå¿ èŠããã
ïŒäžã®ã³ãŒãã§ã¯ä¿®æ£æžã¿ïŒãè£è¶³: XML ã§ã¯å®£èšãšå®äœãé£ãéããšãããŒãµããšã©ãŒã«ãã
ïŒHTML ã®ããã«é»ã£ãŠæšæž¬ããªãïŒãããã¯è¯ãæ§è³ªã§ãããã»encoding ãçç¥ããå ŽåããUTF-8 ãšèŠãªãããã ã»BOM ãããã°ãBOM ãåªå ããã ã»å®£èšãšå®äœãéãã°ãããŒã¹ ãšã©ãŒ.NET ã§ XML ãæžãåºãéã
XmlWriterSettings.Encodingãšå®éã®æžã蟌ã¿å ãæãããvar settings = new XmlWriterSettings { Encoding = new UTF8Encoding(false) }; using var writer = XmlWriter.Create("out.xml", settings);
new UTF8Encoding(false)ã®false㯠BOM ãä»ããªãæå®ã§ããã
Encoding.UTF8㯠BOM ä»ããªã®ã§ã
æå³ãã BOM ãå ¥ã£ãŠçžæã·ã¹ãã ãèªããªããªãäºæ ãèµ·ããã
-
æŠèŠ
- URI ã«ãããŠäœ¿çšã§ããªãæåã䜿ãéã«è¡ããããšã³ã³ãŒãïŒãšã¹ã±ãŒãïŒãè¡ãã
- RFC3986 ã® Section 2.1 ã§å®çŸ©ãããŠããã
-
å©çšã·ãŒã³
- Query String çµç±ã§ããŒã¿ãåãæž¡ãå Žåã«ã䜿çšããã
-
åè
- ããŒã»ã³ããšã³ã³ãŒãã£ã³ã° - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0
- ããŒã»ã³ããšã³ã³ãŒãã£ã³ã° - Wikipedia
è£è¶³ïŒ.NET ã®ãšã³ã³ãŒã API ã®äœ¿ãåãïŒ: URL ãšã³ã³ãŒãã«ã¯
埮åŠã«ä»æ§ã®éã API ãè€æ°ãããããæ··åãããšäºæ ã«ãªãã
API 空çœã®æ±ã çšé Uri.EscapeDataString%20RFC 3986 æºæ ãããã䜿ã Uri.EscapeUriString%20廿¢æžã¿ïŒObsoleteïŒã䜿ããªã HttpUtility.UrlEncode+application/x-www-form-urlencodedïŒãã©ãŒã ïŒWebUtility.UrlEncode+åäžïŒ System.NetåŽïŒUri.EscapeDataString("ã ã"); // "%E3%81%82%20%E3%81%84" HttpUtility.UrlEncode("ã ã"); // "%e3%81%82+%e3%81%84"
+ã空çœãšè§£éããã®ã¯ãã©ãŒã éä¿¡ã®èŠåã§ããã
**URL ã®ãã¹éšåã§ã¯+ã¯ããã©ã¹èšå·ãã®ãã®ã**ã§ããã
ãã¹ã«HttpUtility.UrlEncodeã䜿ããšã
空çœã+ã«ãªã£ãŠçžæã«å¥ã®æååãšããŠå±ããã䜿ãåãã URL ã®ãã¹ã»ã¯ãšãªã®ãå€ã â Uri.EscapeDataString ãã©ãŒã ã® POST ãã㣠â HttpUtility.UrlEncodeæåã³ãŒãã«ã泚æããã
URL ãšã³ã³ãŒãã¯ãã€ãåã %XX ã«ããã ããªã®ã§ã
å ã®ãã€ãåã UTF-8 ã CP932 ãã§çµæãå€ããã
çŸåšã¯ UTF-8 ãæ¢å®ïŒRFC 3986 ãæšå¥šïŒã ãã
å€ãã·ã¹ãã 㯠CP932 ã§éã£ãŠããããšãããã
-
æŠèŠ
- Byte ããŒã¿ãšæååã®çžäºå€æãè¡ãã
-
å©çšã·ãŒã³
- Byte ããŒã¿ã Text ããŒã¹ã®ãããã³ã«ïŒSMTP, HTTP çïŒã«ä¹ããå Žåã«äœ¿çšããã
-
åè
- Base64 - Wikipedia
https://ja.wikipedia.org/wiki/Base64
- Base64 - Wikipedia
è£è¶³ïŒBase64 ã®å®éïŒ: Base64 ã¯æå·åã§ã¯ãªãââ
誀解ãå€ãã®ã§æèšããŠããã誰ã§ã埩å ã§ãããstring s = Convert.ToBase64String(Encoding.UTF8.GetBytes("ç§å¯")); // "56eY5a+G" â åã«èªã¿ã«ããã ãã§ãç§å¿æ§ã¯ãªããµã€ãºãçŽ 4/3 ã«å¢ããç¹ãéèŠã§ãã
ïŒ3 ãã€ã â 4 æåïŒã倧ããªããŒã¿ã«ã¯åããªããURL ã§äœ¿ãå Žåã¯ãBase64 URL ã»ãŒãããèŠãã
ãæšæºã® Base64ã + / = â URL ã§æå³ãæã€æåãå ¥ã ãBase64 URL ã»ãŒãã - _ â + â -ã/ â _ã= ã¯é€å»JWT ãããŒã¯ã³ç³»ã¯ãã¹ãŠ URL ã»ãŒãã§ããã
// .NET 9 以éã¯æšæº API ããã var s = System.Buffers.Text.Base64Url.EncodeToString(bytes); // ãã以åã¯èªåã§çœ®æãã var s = Convert.ToBase64String(bytes) .Replace('+', '-').Replace('/', '_').TrimEnd('=');æ§èœãèŠãå Žé¢ã§ã¯
Convert.TryToBase64Charsã䜿ããš
äžéã®æååå²ãåœãŠãé¿ããããã
CSV ãã¡ã€ã«ãæ±ãéã¯ã以äžã®ããšã«æ°ãä»ããã
Excel ã«ãŠæååãããšã©ãŒãçºçããèªã¿èŸŒãã CSV ãã¡ã€ã«ã¯ã
以äžã® 2 çš®é¡ã®ãšã³ã³ãŒãã®ãã¡ã€ã«ã§ããã
- BOM ä»ã UTF-8
- åèšèª(åœ)ã® ANSI ã³ãŒã
åèšèª(åœ)ã® ANSI ã³ãŒã(äžäŸ)
| # | èšèª | æåã»ããå | codepage |
|---|---|---|---|
| 1 | æ¥æ¬èª | Shift-JIS | 932 |
| 2 | è±èª(ç±³åœ) | Windows-1252 | 1252 |
| 3 | è±èª(è±åœ) | Windows-1252 | 1252 |
| 4 | ãã©ã³ã¹èª(ãã©ã³ã¹) | Windows-1252 | 1252 |
| 5 | ã¹ãã€ã³èª(ã¹ãã€ã³) | Windows-1252 | 1252 |
| 6 | ç¹äœåäžåœèª | big5 | 950 |
| 7 | ç°¡äœåäžåœèª | gb2312 | 936 |
| 8 | éåœèª | ks_c_5601-1987 | 949 |
Excel äžã§ CSV 圢åŒã§ä¿åãããšãANSI ã³ãŒãã§ä¿åãããã
è£è¶³ïŒCSV ãš Excel ã®çŸæ³ïŒ: åæã®ãBOM ä»ã UTF-8ããšããææã
æãéèŠãªå®åç¥èã§ãçŸåšãå€ãããªããã»BOM ãªã UTF-8 ã® CSV ã Excel ã§ããã«ã¯ãªãã¯ãããš â ãCP932 ãšèª€èªããŠæååãããã ã»BOM ä»ã UTF-8 ãªã â æ£ãã UTF-8 ãšèªèããã// Web ã¢ããªãã CSV ãããŠã³ããŒããããé var bom = new UTF8Encoding(true).GetPreamble(); // EF BB BF await stream.WriteAsync(bom); await using var writer = new StreamWriter(stream, new UTF8Encoding(false));XML ã§ã¯ BOM ãä»ããªãã®ãç¡é£ãCSV ã§ã¯ BOM ãä»ããââ
ãšããéã®æéã«ãªãç¹ã«æ³šæãããçŸæ³ã®è£è¶³:
é ç® çŸåš Excel ã®ãä¿åã æ¢å®ã¯ä»ã ANSIïŒCP932ïŒããCSV UTF-8ã圢åŒãå¥ã«éžã¹ã Microsoft 365 **ãCSV UTF-8 (ã³ã³ãåºåã)ã**ãéžæè¢ã«ããïŒBOM ä»ãïŒ åºåãæå å°åèšå®ã«äŸåïŒæ¬§å·ã§ã¯ ;ã«ãªãåœãããïŒæ¹è¡ãå«ãã»ã« "ã§å²ããRFC 4180ãããã CSV ãé¿ãããããªãé¿ããã®ãæåã§ããã
ä»£æ¿ å©ç¹ .xlsxãçŽæ¥çæïŒClosedXML çïŒæåã³ãŒãã®åé¡ãæ¶ãããæžåŒãä»ãããã JSON æ§é ãæãŠããUTF-8 ãåæ TSV åºåãæåã®è¡çªãèµ·ãã«ãã CSV ã¯**ãåºåãæåããåŒçšç¬Šããæ¹è¡ããæåã³ãŒããã® 4 ã€ã
ãã¹ãŠææ§**ãšããã亀æåœ¢åŒãšããŠåŒ±ã仿§ã§ããã
垳祚åºå ã§è§Šããéãã
å©çšè ã Excel ã§å å·¥ããåæãªã.xlsxãçŽæ¥åãæ¹ã確å®ã§ããã
-
æååãããªãããã«ããã«ã¯
https://www.tohoho-web.com/wwwxx005.htm -
Oracleãã©ãã«å¯Ÿçã®åºç€ç¥èïŒ6ïŒïŒ
æååãã«é¢ãããã©ãã«ã«åŒ·ããªããå®è·µç·šã (1-4) - ïŒ IT
https://atmarkit.itmedia.co.jp/ait/articles/0903/04/news115.html
- .NET ã§ã®æåãšã³ã³ãŒã
https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/character-encoding-introduction - ã³ãŒã ããŒãžèå¥å
https://learn.microsoft.com/ja-jp/windows/win32/intl/code-page-identifiers - System.Text.Encoding ã¯ã©ã¹
https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding - .NET Core ã§ã®æ¢å®ã®ãšã³ã³ãŒãã£ã³ã°ã®å€æŽ
https://learn.microsoft.com/ja-jp/dotnet/api/system.text.codepagesencodingprovider
Tags: ç§»è¡, .NETéçº, åœéå察å¿, æåã³ãŒã