X



文字コード総合スレ part14
0001デフォルトの名無しさん
垢版 |
2023/03/03(金) 15:46:58.08ID:yKqwMGHT
Windows NTは初代からUnicodeがネイティブの文字コードです。cp932ではありません。
プログラマーなら一度は煩わされたことのある文字コードについてのスレ。
UTF-8、Shift_JIS、JIS、EUC、Unicode、UCS、サロゲートペア、コードポイント、文字コード判定、
合成文字、ソート、TRON、外字コード、その他について語り合いましょう。
各言語での文字列の扱いについての質問もOKです。
基本マッターリ、ささ、茶でもどうぞ。

■過去スレ
文字コード総合スレ part1 http://pc11.2ch.net/test/read.cgi/tech/1031028205/
文字コード総合スレ part2 http://pc11.2ch.net/test/read.cgi/tech/1143375639/
文字コード総合スレ part3 http://pc11.2ch.net/test/read.cgi/tech/1180250376/
文字コード総合スレ part4 http://pc11.2ch.net/test/read.cgi/tech/1228052369/
 (スレ再利用)UnicodeとUTF-8の違いは? http://pc12.2ch.net/test/read.cgi/tech/1177930957/
 (隔離スレ)UnicodeとUTF-8の違いは? その2 http://pc12.2ch.net/test/read.cgi/tech/1274937437/
文字コード総合スレ part5 http://pc12.2ch.net/test/read.cgi/tech/1236529563/
文字コード総合スレ part6 http://hibari.2ch.net/test/read.cgi/tech/1278923059/
文字コード総合スレ part7 http://toro.2ch.net/test/read.cgi/tech/1306595564/
文字コード総合スレ part8 http://peace.2ch.net/test/read.cgi/tech/1354248962/
文字コード総合スレ part9 http://peace.2ch.net/test/read.cgi/tech/1401301779/
文字コード総合スレ Part10 http://mevius.2ch.net/test/read.cgi/tech/1444822140/
文字コード総合スレ Part11 https://mevius.5ch.net/test/read.cgi/tech/1516629503/
文字コード総合スレ Part12 https://mevius.5ch.net/test/read.cgi/tech/1544931495/
文字コード総合スレ part13
https://mevius.5ch.net/test/read.cgi/tech/1593777227/
0003デフォルトの名無しさん
垢版 |
2023/03/04(土) 05:49:15.61ID:USGrlhof
Q. UTF-8 に BOM をつけるべきですか?
A. Unocode Standard では「付けたければ付けても良いが、付ける必要はないし、付けるのはお勧めしない」と規定されています。
0004デフォルトの名無しさん
垢版 |
2023/03/04(土) 11:03:14.60ID:RFNVa0Qi
>>1
>Windows NTは初代からUnicodeがネイティブの文字コードです。cp932ではありません。

filesystem の文字コードと system locale についても詳しく
あとファイル名に BOM 必要かどうかも
0007デフォルトの名無しさん
垢版 |
2023/03/04(土) 23:54:57.70ID:q+Tu7Jlx
>>4
Windowsの場合はUnicodeというのはUTF-16LEを示す模様
UTF-16LEはリトルエンディアン固定でBOMは付かないフォーマット

UnicodeといってもUTF-8ではない
0010デフォルトの名無しさん
垢版 |
2023/03/05(日) 01:17:14.07ID:JF7lH/t4
>>8
規格に理由は書かれてない。
規格書では趣旨として UTF-8 では Unicode をASCII互換にするための方式みたいな説明してるので、BOM をつけると ASCII互換性が崩れるのが駄目なのかもしれない。違うかもしれない。
0012デフォルトの名無しさん
垢版 |
2023/03/05(日) 10:24:42.19ID:Dqp2Pk7H
The Unicode® Standard Version 15.0 – Core Specification
https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf

When converting between different encoding schemes, extreme care must be taken in handling any initial byte order marks.
For example, if one converted a UTF-16 byte serialization with an initial byte order mark to a UTF-8 byte serialization, thereby converting the byte order mark to <EF BB BF> in the UTF-8 form, the <EF BB BF> would now be ambiguous as to its status as a byte order mark (from its source) or as an initial zero width no break space.
If the UTF-8 byte serialization were then converted to UTF-16BE and the initial <EF BB BF> were converted to <FE FF>, the interpretation of the U+FEFF character would have been modified by the conversion.
This would be nonconformant behavior according to conformance clause C7, because the change between byte serializations would have resulted in modification of the interpretation of the text.
This is one reason why the use of the initial byte sequence <EF BB BF> as a signature on UTF-8 byte sequences is not recommended by the Unicode Standard.
0013デフォルトの名無しさん
垢版 |
2023/03/05(日) 10:24:58.61ID:dEWQ/p/B
>>10
ASCIIは文字コードで言えば0~127までの文字
UTF-8が使う128~255はASCII互換ではない

128~255を許容するのであれば
BOMもこの範囲に含まれるのでASCII互換
0016デフォルトの名無しさん
垢版 |
2023/03/05(日) 16:31:35.44ID:C3C6IsZE
>>13
ここで言われるASCII互換は、ASCII上位互換だな。
今までと同じ入力(ASCII)には同じ出力になることが期待されている。今まで勝手にBOMを付けなかったので、勝手にBOMつけるのはNGくらいの意味。
0017デフォルトの名無しさん
垢版 |
2023/03/05(日) 17:06:23.64ID:C3C6IsZE
>>12
「UTF-8 の先頭にある U+FEFF は BOM なのか ZWNBS なのか曖昧なのが、UTF-8 に signature として <FE BB BF> をつけることを推奨しない理由の一つ。」
と書いてあるのか。一つということは他にもあるのか。
0018デフォルトの名無しさん
垢版 |
2023/03/05(日) 17:10:12.27ID:C3C6IsZE
>>15
「BOM が不要の場合は先頭の U+FEFF は後方互換性のために ZWNBS として扱う」と規定には書かれいる。
0019デフォルトの名無しさん
垢版 |
2023/03/05(日) 17:13:23.86ID:C3C6IsZE
>>18
途中で送ってしまった。
当然途中にある U+FEFF は全て Zero Width Non-Breakable Space (ここで改行禁止くらいの意味)として扱われる。
0020デフォルトの名無しさん
垢版 |
2023/03/05(日) 21:42:23.56ID:dEWQ/p/B
>>16
ASCIIと同じ出力になるって言うなら
0~127までの文字しか使えないじゃんw

まさか最初さえ同じなら、後ろは違ってもいいとかいう
意味不明な話してるの?
0023デフォルトの名無しさん
垢版 |
2023/03/05(日) 21:53:29.71ID:JF7lH/t4
>>22
とうとう規格無視しろって言い始めた。
オレオレ基準は他所でやれ。技術者どうしの合意は規格を使う。お前に発言する資格はない。
0024デフォルトの名無しさん
垢版 |
2023/03/05(日) 21:56:43.19ID:dEWQ/p/B
元がASCII → UTF-8 (BOM なし)に変換? → それはただのASCII

UTF-8に対応するのであれば
128~255を許容した上で
UTF-8の仕様に対応しなければいけない

UTF-8に対応するならBOMにも対応しなければいけない
それだけのこと
0026デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:09:24.16ID:VZfS5Nba
>>23
これは規格外をどうするかという話なので、規格の話をしても意味がないぞ
君はエンジニアにむいてない。技術者じゃなくて法律家にでもなれ。
0027デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:11:31.00ID:VZfS5Nba
交通事故が起きた時に、人命救助したり、クルマを安全な場所に移動させようとするのが技術者。
交通事故の責任問題ばかり考えるのが法律家。ID:JF7lH/t4は技術者にむいてない。断言する。
0028デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:16:09.81ID:JF7lH/t4
>>27
悔しかったら Unicode Standard 書き換えてこいや。もしくは賛同者つのって新しい規格でも作ったら?
0029デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:16:39.06ID:VZfS5Nba
規格が不完全でも現実として運用していかなければならないのに、規格を盾に対応を拒否するような技術者はクビだよ
0030デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:20:27.96ID:JF7lH/t4
>>29
規格が不完全なら規格を正しく修正するのが技術者の仕事。
お前の主張が正しいなら規格はとっくに直されてる。変更されないのは今の規格が正しいということ。
0032デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:32:47.50ID:dEWQ/p/B
>>27
つまり文字化けという事故が起きたときに
文字コードを安全に変換できるようにUTF-8のBOMは使われているということか
0033デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:42:24.63ID:Xloi8tSE
うわあ時代遅れのBOM強要おじさんがまだ粘着してる
このクソくだらない流れいつまで続けるんだ、あほらし
0034デフォルトの名無しさん
垢版 |
2023/03/05(日) 22:44:16.68ID:V5cM5Nk9
BOMありもなしも規格では許容していて、あとはその仕様の違いを意識せずに混ぜるなというだけの話。
その一方ですべての文字コードをUTF-8 BOMなしに統一すべきだという原理主義者が存在いる構図。
0035デフォルトの名無しさん
垢版 |
2023/03/05(日) 23:33:36.53ID:JupVD2B6
規格に「推奨しない」って書かれているのをどうしても見なかったことにしたい人がいるみたいだな。
0040デフォルトの名無しさん
垢版 |
2023/03/06(月) 03:36:44.43ID:wHg1YKYv
「お前が○○するぶんには好きにしろ」でいい気がするのだが
なんか相手の使い方にそれ以上踏み込んで口を出したくてたまらない人がいるのがエンドレスの原因な気がするのだが
0041デフォルトの名無しさん
垢版 |
2023/03/06(月) 05:16:32.79ID:5TJ6iMgZ
>>40
自分が口出してるという自覚はないのか?
「UTF-8でBOMは許容されている。推奨されていないだけ。」
これが事実だろ

これ以上のことは言わんでいい
0042デフォルトの名無しさん
垢版 |
2023/03/06(月) 08:52:12.04ID:nYGMo+Fh
推奨されてないものを付けろだの、対応しろだの、規格無視しろだの言うから荒れてる。
つけたきゃ勝手につけろ。他人に勧めるなで終わり。
0043デフォルトの名無しさん
垢版 |
2023/03/06(月) 09:27:16.62ID:7tSuC6ry
https://www.unicode.org/versions/Unicode15.0.0/UnicodeStandard-15.0.pdf#page=967

In UTF-8, the BOM corresponds to the byte sequence <EF BB BF>.
Although there are never any questions of byte order with UTF-8 text, this sequence can serve as signature for UTF-8 encoded text where the character set is unmarked.
(中略)
For compatibility with versions of the Unicode Standard prior to Version 3.2, the code point U+FEFF has the word-joining semantics of zero width no-break space when it is not used as a BOM. In new text, these semantics should be encoded by U+2060 word joiner.
See “Line and Word Breaking” in Section 23.2, Layout Controls, for more information.
0044デフォルトの名無しさん
垢版 |
2023/03/06(月) 10:05:23.97ID:OTf/Royi
BOMというのはバイトオーダーマークの略で
リトルエンディアンかビッグエンディアンか区別するためのもの
UTF-8では必要ない
これはWindowsのメモ帳のバグでM$がUTF-8にBOMをつけたのが始まり
仕方ないからUnicodeで許可されてるだけで本来はつけてはいけない
0045デフォルトの名無しさん
垢版 |
2023/03/06(月) 11:39:19.84ID:VJJWQXML
>>44
ついてた時にどうするかが重要なのであって、そこが自由裁量であり経営判断。
Windowsの資産をすべて捨てる決断をするのはカネを払う経営者やユーザーであって技術者ではない。
0046デフォルトの名無しさん
垢版 |
2023/03/06(月) 11:42:21.59ID:VJJWQXML
山茶花(サザンカ)は本来サンザカと読まなければならないのだから、今後はサザンカは受け付けない(キリッ
0047デフォルトの名無しさん
垢版 |
2023/03/06(月) 11:50:48.53ID:OTf/Royi
>>45
お前のようなやつがいるからWindowsはいつまでもShiftJISを使い続けることになる
BOMはUnicodeでは認められていない。禁止すべきものだ。
0048デフォルトの名無しさん
垢版 |
2023/03/06(月) 11:51:31.28ID:M8d550bg
>>45
入力がBOMつきUTF-8に指定されている場合はBOMとして処理しろ。
入力がBOMなしUTF-8に指定されている場合はZWNBSとして処理しろ。
0050デフォルトの名無しさん
垢版 |
2023/03/06(月) 12:36:46.99ID:VJJWQXML
ま、積極的にBOMを使うのが運用として自然だから、BOMをつけるアプリがドンドン増える。
デファクトスタンダード。
0051デフォルトの名無しさん
垢版 |
2023/03/06(月) 14:23:24.15ID:diWxUEyJ
>>19
>Zero Width Non-Breakable Space (ここで改行禁止くらいの意味)

何も処理せず読み飛ばせって意味では
0052デフォルトの名無しさん
垢版 |
2023/03/06(月) 14:36:44.93ID:diWxUEyJ
>>51 の補足だが
入力に(BOMありかBOMなしかはともかく)
[ZWNBS]AB[ZWNBS]CD
というデータがあれば
出力は
ABCD
になるという意味ね
0053デフォルトの名無しさん
垢版 |
2023/03/06(月) 14:53:51.51ID:M8d550bg
>>52
先頭は無意味だがそのまま保存する。
途中のはBとCの間で自動改行禁止という指示になる。
# 家(ZWNBS)康 ってしとけば難癖つけらなくて安全だな。
0054デフォルトの名無しさん
垢版 |
2023/03/06(月) 18:29:55.53ID:wCDmqeE8
話の途中ですまんのだが
ASCIIって7bitのはずなのに下みたいにどう見ても先頭に0がついて8桁あるのはなんでなんや
https://medium-company.com/ascii%E3%82%B3%E3%83%BC%E3%83%89/
もしかして先頭に0をつけて8bitにしたのがメモ帳とかでは標準の表現方法なんか?
0055デフォルトの名無しさん
垢版 |
2023/03/06(月) 19:54:14.87ID:M8d550bg
>>54
単に 8bit = 1byte の世界で説明してるからだろう。(最近はそれしかないので、昔は 7bit = 1byte とかもあった)
0056デフォルトの名無しさん
垢版 |
2023/03/06(月) 21:19:45.89ID:wCDmqeE8
そうなん?
じゃあ実際のバイナリ列は7桁なんやね
0061デフォルトの名無しさん
垢版 |
2023/03/07(火) 00:56:51.64ID:6eBCzRN0
JSONではUTF8必須かつBOMを付けてはいけないと明確に定められてるんだな
全てがこのように決まれば文字コードで悩むこと無くなるな

ソース
https://www.rfc-editor.org/rfc/rfc8259.html#section-8.1
JSON text exchanged between systems that are not part of a closed ecosystem
MUST be encoded using UTF-8 [RFC3629].
Implementations MUST NOT add a byte order mark (U+FEFF)
to the beginning of a networked-transmitted JSON text.
0064デフォルトの名無しさん
垢版 |
2023/03/07(火) 09:10:52.97ID:ITg7AjV1
なんだろな。このど素人が混ざってる感じ
ASCII はもともと 1byte に 1文字を入れる設計。
6bit マシンには非対応
7bit マシンにはそのまま入れる
8bit マシンでパリティ不要なら最上位bitにゼロを入れる
という設計。最近の機器は全部8bitマシンなので最上位にゼロが入る。
(ISO 2022 拡張とかで変更できるけど)
0066デフォルトの名無しさん
垢版 |
2023/03/07(火) 10:08:55.63ID:fx05/qep
本質がわかってないやつがいるが
論点はBOM禁止という話
M$のバグのために仕様を歪めるな!
0067デフォルトの名無しさん
垢版 |
2023/03/07(火) 12:02:26.19ID:CdvGJ9oA
将来SJIS(cp932)やそれ以外のcp(cp65001を除く)は全部無くなるんだろうし
その頃にはUTF-8にBOM付けるやつは居なくなると想定していて
その準備段階として現状UTF-8にBOM付けるべきでないってスタンス
今がんばってBOM付けろって言ってるアホは死ぬまでSJIS浸かってろ
0068デフォルトの名無しさん
垢版 |
2023/03/07(火) 12:58:43.14ID:5oG+IrWl
>>67
そのとおり。死ぬまでSJIS浸かってる人は今後もずっと存在し続けるからBOMつけるのが最適解だよ。
0069デフォルトの名無しさん
垢版 |
2023/03/07(火) 13:14:07.69ID:ng3wG2tM
MSがWindows12でSJIS(CP932)を異様に扱い難くくするとかの
ペナルティが無いと10年後でも平気で残ってそうだ
互換性重視のWindowsが完全にUTF-8で統一なんて20年はかかると予想
0070デフォルトの名無しさん
垢版 |
2023/03/07(火) 13:18:03.53ID:FxAt1biD
>>68
お前にとってはそうなんだろうな。後5年くらいしか生きない老害にとってはそれが最適解。間違いないな。
0071デフォルトの名無しさん
垢版 |
2023/03/07(火) 13:18:03.91ID:5oG+IrWl
暴れている人は、最近覚えたCP932という単語ばかり使ってlatin-1の話が出てこないあたり、初心者っぽい。
もうこのスレに書き込まないでくれ。静かに読むだけにしてくれ。
0073デフォルトの名無しさん
垢版 |
2023/03/07(火) 14:05:19.65ID:jU//zIC9
誰か1人が暴れていると書く人は自分が見えていない
このスレでは2人がお互い暴れている
0076デフォルトの名無しさん
垢版 |
2023/03/07(火) 23:29:59.54ID:aKlG86O4
もちろん反対の立場(自由主義)だよ。BOM付けても付けなくてもいいしUTF-8以外のコードも容認する。
0077デフォルトの名無しさん
垢版 |
2023/03/08(水) 00:34:32.71ID:Ax/TB2dR
>>61の例のように文字コードは全てUTB8で統一そしてBOMは使用不可が現在進んでいる方向だろう
文字コード問題があるおかげで喰ってる既得権益層にとっては脅威
0078デフォルトの名無しさん
垢版 |
2023/03/08(水) 02:50:08.33ID:KzMkGg+5
外部コードが UTF-8 BOM 無しで統一されれば文字コードで悩むやつは少なくなるだろうな
Linux はほぼそうなっていて、Mac も頑張っている。Windows はまだこれからだけどMicrosoft はその方向性を技術者向けに発信してる
10年後くらいの新人に「SJIS? 昔そういうのもあったんですね。まだ使ってるんですか?」とか言われそう
0079デフォルトの名無しさん
垢版 |
2023/03/08(水) 03:53:49.16ID:zRm+4Flk
過去のソフト・データの資産こそがWindowsの存在意義なんだから、いまさら捨てられる分けがない
それがなかったらWindowsである必要がないからな
古すぎて非効率極まりないWin32 APIが結局今も残っているのと同じこと
マイクロソフトがいくら頑張ってもこれはどうしようもないことなんだよね
もはや誰もメンテしてないDOS時代に作られたツールがひっそりと使われていたりするし
10年後はまだ確実にSJISが残っていると思うよ
20年後はわからないが
0080デフォルトの名無しさん
垢版 |
2023/03/08(水) 04:42:28.62ID:PePxsOuN
過去のデータや文字コードは、そういうのを取り扱うレガシーなアプリケーション
(ブラウザなり古いテキストエディタなり)が対応してれば事足りるよね

今後作成するシステムは基本的にすべてBOMなしUTF8で統一、
連携対象となる外部I/Fがあればインターフェース仕様に応じたエンコーディングを採用すればよい
CSVなんかはExcelで開くことを考えるとどうしてもBOMありにせざるを得ないだろうけど
普通のプレーンテキストならメモ帳ですらBOMなしUTF8がデフォルトになってもう何年も経ってる以上
あえて今更BOMありを要件にする必要はないだろう
0081デフォルトの名無しさん
垢版 |
2023/03/08(水) 04:53:38.07ID:PePxsOuN
EUC-JPのテキストファイルにお目にかかる機会もほとんどなくなった
linuxのデフォルト文字コードがUTF8に変わったのっていつ頃だったっけ

iso2022jpもほぼほぼ見なくなったかな
メールクライアントやメールサーバでUTF8がデフォルトになってから15年位ってところか

sjisが消滅するまでEUCやiso2022jpと同じくらい時間がかかるとすれば
やっぱり2030~2040年位になるのかな
0082デフォルトの名無しさん
垢版 |
2023/03/08(水) 07:30:34.89ID:0e7t4My9
>文字コード問題があるおかげで喰ってる既得権益層にとっては脅威

そんなんで食っていけるってどんな仕事だよと思うが、本人は本気で思っていそうだな。
0085デフォルトの名無しさん
垢版 |
2023/03/08(水) 10:32:01.17ID:FKUb7GnF
インターネットの世界だとUTF-8のBOMは「つけるな、解釈するな、さわるな」だから。
20年前にRFC改定されてからはそんな感じ。
0086デフォルトの名無しさん
垢版 |
2023/03/08(水) 19:22:53.32ID:Gpe8bqC5
>>81
ひと昔前の海外OSSのソースコードやドキュメントはCP1252(latin)が当たり前だったな
いつのまにかUTF8で統一されたように感じるのはなぜだろう
0090デフォルトの名無しさん
垢版 |
2023/03/09(木) 18:57:54.79ID:WLy5E3Kl
なんで?って一瞬思ったけどロシア製だからか
koi8?cp1251どっちだとしても非キリル文字圏のwindowsだと辛いね
0091デフォルトの名無しさん
垢版 |
2023/03/11(土) 08:34:25.16ID:4eNVcbJV
VS Code と PowerShell でのファイルのエンコードの概要
https://learn.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/vscode/understanding-file-encoding#choosing-the-right-encoding

システムやアプリケーションごとに使用しているエンコードが異なる可能性があります。

・現在、.NET Standard、Web、Linux の世界では、UTF-8 が主流のエンコードです。
・多くの .NET Framework アプリケーションは UTF-16 を使用しています。 歴史的な理由から、これは "Unicode" と呼ばれることもあり、現在では UTF-8 と UTF-16 の両方を含む広範な標準を指しています。
・Windows では、Unicode より前のネイティブ アプリケーションの多くが既定で Windows-1252 を使用し続けています。

BOM はオプションであり、Linux の世界ではそれほど採用されていません。UTF-8 の信頼性の高い規則があらゆるところで使用されているためです。 ほとんどの Linux アプリケーションでは、テキスト入力が UTF-8 でエンコードされていると想定されています。 多くの Linux アプリケーションは BOM を認識して正しく処理しますが、認識しないものもあります。そのため、そのようなアプリケーションで処理されたテキストにアーティファクトが生じます。

したがって:

・主に Windows アプリケーションと Windows PowerShell を使用している場合は、BOM ありの UTF-8 または UTF-16 のようなエンコードをお勧めします。
・複数のプラットフォームにまたがって作業する場合は、BOM ありの UTF-8 をお勧めします。
・主に Linux 関連のコンテキストで作業する場合は、BOM なしの UTF-8 をお勧めします。
・Windows-1252 とラテン-1 は基本的にレガシ エンコードであり、できれば避けてください。 ただし、一部の古い Windows アプリケーションではそれらに依存している可能性があります。
0093デフォルトの名無しさん
垢版 |
2023/03/11(土) 10:23:36.62ID:5Ex6umnL
UNIX はパイプで複数のデータストリームが一つになったりするので,
データストリームの「先頭」とは何かがはっきりしないよね
tar のデータストリームとかどうするんだろうね
0094デフォルトの名無しさん
垢版 |
2023/03/11(土) 10:42:53.36ID:2IDu8ors
そういいながら、結局 PowerShell の新しいバージョンからデフォルトを BOM無しUTF-8 に変更してきたのがマイクロソフト流儀だけどな。
時代の流れは早いお。
0097デフォルトの名無しさん
垢版 |
2023/03/11(土) 19:54:34.90ID:WfuE5Qpv
Windows技術者「お前ぇぇ、WindowsアプリではBOMつきUTF-8 使えって言ってたじゃん。なんでVScodeやPowerShellの新しいの BOMなしなの?」
MS「BOMつきは昔の話」
俺「......
レスを投稿する


ニューススポーツなんでも実況