行が '\n' または '\r' または '\r\n' で終了しているかどうかはわかりません。また、エンコードが utf-8 である場合に加えて、テキストが でエンコードされているものもわかりません。ボムなし。これを行うことができる関数またはライブラリはありますか、または行の終了を教えてください。
質問する
165 次
2 に答える
1
wcslen を使用して、utf8 文字列のバイト単位のサイズを取得します。
于 2013-03-28T13:07:40.697 に答える
1
テキストを読むために開いているファイルで、たまたまfgets
、、、、などを使用していませんか? その場合、実装は、読み取り時にOS 固有の行末記号 (例: ) に自動的に変換し、書き込み時に OS 固有の行末記号に変換します。fread
fputs
fwrite
"\r\n"
'\n'
'\n'
他に 2 つのシナリオがあり、そのうちの 1 つは OP であることが判明しました。
- OPは
"\r\n"
他のOSソフトウェアから引き継がれることに苦労していたため、彼の(おそらくUnixのような)OSで読み取るためにファイルを開くと、それが変換されなくなりました。私の提案は、dos2unix
二度と実行されない可能性が高いものでコードを肥大化させるのではなく、これらの 1 回限りの変換に使用することです。 - これらの関数のいずれも使用していません。これは、ソケットなどのストリームを使用していることが原因である可能性があり、おそらくプロトコルで
"\r\n"
. この場合、strstr
正確なシーケンスを見つけるために使用する必要があります"\r\n"
。
UTF-8 は ASCII とのある程度の互換性を考慮して設計されているため、UTF-8 を使用するシステムでは ASCII または類似の文字セットも使用されると想定できます。1 バイトを超えるシーケンスを使用する文字は、0x80 以上の値のみを使用して表現されます。0x00-0x7F の範囲内にあるため'\n'
、1 バイトであり、マルチバイト文字の一部として存在しないことが保証されます。
于 2013-03-28T13:22:34.013 に答える